tutorial lost leaks definitely c++ linux memory profiler valgrind

c++ - lost - use valgrind to find memory leaks



Cómo perfil de uso de memoria? (2)

Pruebe el generador de perfiles de pila entregado con gperftools , por Google. Siempre lo he creado a partir de 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 (por lo que he visto) y guarda en el disco un volcado de memoria cada vez que ocurre una de las siguientes situaciones:

  • HEAP_PROFILE_ALLOCATION_INTERVAL bytes han sido asignados por el programa (valor predeterminado: 1Gb)
  • la marca de uso de memoria de nivel alto de agua aumenta en bytes HEAP_PROFILE_INUSE_INTERVAL (valor predeterminado: 100 Mb)
  • HEAP_PROFILE_TIME_INTERVAL segundos han transcurrido (predeterminado: inactivo)
  • Llama explícitamente a HeapProfilerDump() desde su código

El último, en mi experiencia, es el más útil porque puedes controlar exactamente cuándo tener una instantánea del uso del montón y luego comparar dos instantáneas diferentes y ver qué está mal.

Eventualmente, hay varios formatos de salida posibles, como textuales o gráficos (en la forma de un gráfico dirigido):

Usando esta herramienta he podido detectar usos incorrectos de la memoria que no pude encontrar usando Massif.

Estoy al tanto de Valgrind, pero solo detecta problemas de administración de memoria. Lo que estoy buscando es una herramienta que me da una visión general, qué partes de mi programa consumen cuánta memoria. Una representación gráfica con, por ejemplo, un mapa de árbol (como hace KCachegrind para Callgrind) sería genial.

Estoy trabajando en una máquina Linux, por lo que las herramientas de Windows no me ayudarán mucho.


Usa el massif , que es parte de las herramientas de Valgrind. massif-visualizer puede ayudarlo a graficar los datos o simplemente puede usar el comando ms_print .