Utilisez du massif, qui fait partie des outils Valgrind. massif-visualizer peut vous aider à représenter graphiquement les données ou vous pouvez simplement utiliser le ms_print
commande.
Essayez le profileur de tas fourni avec gperftools, par Google. Je l'ai toujours construit à partir des sources, mais il est disponible sous forme de package précompilé sous plusieurs distributions Linux.
C'est aussi simple à utiliser que de lier une bibliothèque dynamique à vos exécutables et d'exécuter le programme. Il collecte des informations sur chaque allocation de mémoire dynamique (pour autant que j'ai vu) et enregistre sur le disque un vidage mémoire chaque fois que l'un des événements suivants se produit :
HEAP_PROFILE_ALLOCATION_INTERVAL
octets ont été alloués par le programme (par défaut :1 Go)- la marque d'utilisation maximale de la mémoire augmente de
HEAP_PROFILE_INUSE_INTERVAL
octets (par défaut :100 Mo) HEAP_PROFILE_TIME_INTERVAL
secondes se sont écoulées (par défaut :inactif)- Vous appelez explicitement
HeapProfilerDump()
à partir de votre code
Le dernier, d'après mon expérience, est le plus utile car vous pouvez contrôler exactement quand avoir un instantané de l'utilisation du tas puis comparez deux instantanés différents et voyez ce qui ne va pas.
A terme, il existe plusieurs formats de sortie possibles, comme textuel ou graphique (sous forme de graphe orienté) :
Grâce à cet outil, j'ai pu repérer les utilisations incorrectes de la mémoire que je ne pouvais pas trouver avec Massif.