Was bedeutet »heap«?
Was bedeutet »In file [heap]«?
Das bedeutet, dass Sysprof glaubt, eine Funktion wurde von irgendwo im Heap des Programms (wo malloc Speicher zuweist) statt im Codebereich (wo sich ausführbarer Code normalerweise befindet) aufgerufen. Dafür gibt es mehrere mögliche Erklärungen.
Just-in-Time-Compiler (JIT)
Sprachen wie Java können ausführbaren Code zur Laufzeit generieren und ihn in den Heap abspeichern. Sysprof erfasst die Situation in diesem Fall korrekt.
Compiler-Optimierung
Compiler für C und C++ können Informationen, die zur Bestimmung des Aufrufers einer Funktion benötigt werden, wegoptimieren. Dadurch wird er fälschlicherweise als [heap] identifiziert. Sie können dennoch erkennen, wie oft jede Funktion vom Programm aufgerufen wird, nur nicht immer woher.
Für gcc verhindert die Flagge -fno-omit-frame-pointer diese Optimierung. Die Flagge ist nicht immer erforderlich: Auf x86_64-Rechnern beispielsweise wird sie nur mit der -O3-Optimierung benötigt.
Um den detailliertesten und akkuratesten Aufrufbaum aus nicht-optimiertem Code zu erhalten, verwenden Sie diese Flaggen: -ggdb -fno-omit-frame-pointer -O0