Ich brauche einen Speicher-Profiler, um die Speicherbelegung für jede Funktion zu kennen. Ich kenne Valgrind (Massif), aber es gibt mir keine Informationen über bestimmte Funktionen (zumindest weiß ich nicht, wie man es mit dem Massiv macht)
Kennen Sie ein Tool für diesen Zweck in Linux?
Danke!
Wenn Sie nur den Speicherort abfragen möchten, von dem viel Speicher angefordert wird, ist es am einfachsten, malloc
function zu patchen oder eine neue Bibliothek mit malloc
call zu erstellen und die Größe Ihres malloc function
zu verfolgen. . Ich spreche nicht über die Umsetzung der Malloc Call. LD_PRELOAD diese Bibliothek zu Ihrer Anwendung.
Hier ist ein Beispielcode:
%Vor%Sie können diesen Code sehr gut modifizieren, um einige zusätzliche Dinge zu tun.
Massif
zeigt Ihnen an, welche Funktionen für die Speichernutzung verantwortlich waren, solange Sie Ihr Programm mit Debugging-Informationen ( -g
) kompiliert haben. Es zeigt Ihnen sogar die Zeilennummer.
Diese Informationen werden als Aufrufbaum in jedem detaillierten Snapshot unter dem Diagramm in der Ausgabe ms_print
angegeben. Die Häufigkeit detaillierter Snapshots kann mit der Option --detailed-freq
auf massiv festgelegt werden. Einzelheiten zum Lesen des detaillierten Snapshots finden Sie im Abschnitt 9.2.6 des Massif-Handbuchs Informationen.
Wie schon andere darauf hingewiesen haben, gibt Massif erschöpfende Profilinformationen, aber es verlangsamt den Prozess erheblich.
Eine weitere Option ist Google's tcmalloc, das einen eingebetteten Heap-Profiler hat, der den Aufrufgraphen mit Zuweisungen ablegt (siehe Ссылка ), die auch grafisch visualisiert werden können.
Sie können es zur Laufzeit mit Ihrem Programm mit LD_PRELOAD
verknüpfen, und die Variable HEAPPROFILE
env aktiviert den Heap-Profiler.