Vad betyder heap?
Vad betyder ”In file [heap]”?
Detta betyder att sysprof tror att en funktion anropades från någonstans i programmets heap (där malloc allokerar minne) snarare än kodavsnittet (där körbar kod vanligen befinner sig.) Det finns flera möjliga förklaringar.
JIT-kompilatorer (Just in Time)
Språk som java kan generera körbar kod under tiden ett program körs och lagra den i heapen. Sysprof rapporterar situationen korrekt i detta fall.
Optimera kompilatorer
C- och C++-kompilatorer kan optimera bort information som krävs för att avgöra en funktions anropare, så den antas felaktigt vara [heap]. Du kan fortfarande avgöra hur ofta varje funktion anropas av programmet, men inte alltid från var.
För gcc kommer flaggan -fno-omit-frame-pointer förhindra denna optimering. Flaggan behövs inte alltid, på x86_64-behövs den exempelvis bara med optimeringen -O3.
För att få det mest detaljerade och korrekta anropsträdet från icke-optimerad kod, använd dessa flaggor: -ggdb -fno-omit-frame-pointer -O0