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