scootergrisen
2020

# Hvad betyder heap?

# Hvad betyder "In file [heap]"?

Det betyder at sysprof mener, at en funktion blev kaldt fra et programs heap (hvor `malloc` allokerer hukommelse) frem for kodeafsnittet (hvor eksekverbar kode normalt findes). Der kan være flere forklaringer til det.

# JIT-kompilere (Just in Time)

Sprog som Java kan generere eksekverbar kode, mens et program kører og gemme det i heapen. Sysprof rapporterer situationen, når det er tilfældet.

# Optimerende kompilere

C- og C++-kompilere kan optimere information bort, som behøves til at bestemme en funktions kalder, så den forveksles for [heap]. Du kan stadigvæk se, hvor tit hver funktion kaldes af programmet, men ikke altid hvorfra.

I gcc forhindrer flaget `-fno-omit-frame-pointer` denne optimering. Flaget behøves ikke altid, f.eks. på x86_64-maskiner er det kun nødvendigt sammen med optimeringen -O3.

Brug følgende flag for at få det mest detaljerede og præcise kaldtræ fra kode, som ikke er blevet optimeret: `-ggdb -fno-omit-frame-pointer -O0`