Anders Jonsson
anders.jonsson@norsjovallen.se 2016

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