Mario Blättermann
mario.blaettermann@gmail.com 2016
Tim Sabsch
tim@sabsch.com 2018
Christian Kirbach
christian.kirbach@gmail.com 2018, 2024
Jürgen Benvenuti
gastornis@posteo.org 2023, 2024

# 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`