Usa il massiccio, che fa parte degli strumenti Valgrind. massif-visualizer può aiutarti a rappresentare graficamente i dati o puoi semplicemente usare ms_print
comando.
Prova l'heap profiler fornito con gperftools, da Google. L'ho sempre compilato dai sorgenti, ma è disponibile come pacchetto precompilato in diverse distribuzioni Linux.
È semplice da usare come collegare una libreria dinamica ai tuoi eseguibili ed eseguire il programma. Raccoglie informazioni su ogni allocazione di memoria dinamica (per quanto ho visto) e salva su disco un dump della memoria ogni volta che si verifica una delle seguenti condizioni:
HEAP_PROFILE_ALLOCATION_INTERVAL
i byte sono stati allocati dal programma (predefinito:1Gb)- il livello massimo di utilizzo della memoria aumenta di
HEAP_PROFILE_INUSE_INTERVAL
byte (predefinito:100 Mb) HEAP_PROFILE_TIME_INTERVAL
secondi sono trascorsi (predefinito:inattivo)- Chiami esplicitamente
HeapProfilerDump()
dal tuo codice
L'ultimo, secondo la mia esperienza, è il più utile perché puoi controllare esattamente quando avere un'istantanea dell'utilizzo dell'heap e poi confronta due istantanee diverse e vedi cosa c'è che non va.
Alla fine, ci sono diversi possibili formati di output, come testuale o grafico (sotto forma di un grafico diretto):
Usando questo strumento sono stato in grado di individuare usi errati della memoria che non sono riuscito a trovare usando Massif.