Use macizo, que es parte de las herramientas Valgrind. massif-visualizer puede ayudarlo a graficar los datos o simplemente puede usar el ms_print comando.
Pruebe el generador de perfiles de almacenamiento dinámico proporcionado con gperftools, por Google. Siempre lo he creado a partir de las fuentes, pero está disponible como un paquete precompilado en varias distribuciones de Linux.
Es tan simple de usar como vincular una biblioteca dinámica a sus ejecutables y ejecutar el programa. Recopila información sobre cada asignación de memoria dinámica (hasta donde he visto) y guarda en el disco un volcado de memoria cada vez que ocurra uno de los siguientes:
HEAP_PROFILE_ALLOCATION_INTERVALel programa ha asignado bytes (predeterminado:1 Gb)- la marca de uso de memoria de agua alta aumenta en
HEAP_PROFILE_INUSE_INTERVALbytes (predeterminado:100 Mb) HEAP_PROFILE_TIME_INTERVALhan transcurrido segundos (predeterminado:inactivo)- Usted llama explícitamente a
HeapProfilerDump()de tu código
El último, según mi experiencia, es el más útil porque puede controlar exactamente cuándo tener una instantánea del uso del almacenamiento dinámico y luego compare dos instantáneas diferentes y vea qué está mal.
Eventualmente, existen varios formatos de salida posibles, como textual o gráfico (en forma de gráfico dirigido):

Con esta herramienta, he podido detectar usos de memoria incorrectos que no pude encontrar con Massif.