Verwenden Sie Massif, das Teil der Valgrind-Tools ist. Massif-Visualizer kann Ihnen helfen, die Daten grafisch darzustellen, oder Sie können einfach den ms_print
verwenden Befehl.
Probieren Sie den mit gperftools von Google gelieferten Heap-Profiler aus. Ich habe es immer aus Quellen gebaut, aber es ist als vorkompiliertes Paket unter mehreren Linux-Distributionen verfügbar.
Die Verwendung ist so einfach wie das Verknüpfen einer dynamischen Bibliothek mit Ihren ausführbaren Dateien und das Ausführen des Programms. Es sammelt Informationen über jede dynamische Speicherzuweisung (soweit ich gesehen habe) und speichert auf der Festplatte einen Speicherauszug jedes Mal, wenn eines der folgenden Ereignisse eintritt:
HEAP_PROFILE_ALLOCATION_INTERVAL
Bytes wurden vom Programm zugewiesen (Standard:1 GB)- die Marke für die High-Water-Speicherauslastung steigt um
HEAP_PROFILE_INUSE_INTERVAL
Bytes (Standard:100 MB) HEAP_PROFILE_TIME_INTERVAL
Sekunden sind abgelaufen (Standard:inaktiv)- Du rufst ausdrücklich
HeapProfilerDump()
auf aus Ihrem Code
Letzteres ist meiner Erfahrung nach am nützlichsten, da Sie genau steuern können, wann Sie einen Schnappschuss der Heap-Nutzung erhalten möchten und vergleichen Sie dann zwei verschiedene Snapshots und sehen Sie, was falsch ist.
Schließlich gibt es mehrere mögliche Ausgabeformate, wie textuell oder grafisch (in Form eines gerichteten Graphen):
Mit diesem Tool konnte ich falsche Speicherauslastungen erkennen, die ich mit Massif nicht finden konnte.