Co znamená heap?
Co znamená „In file [heap]“?
Znamená to, že sysprof věří, že funkce byla zavolaná odněkud z haldy programu (oblast, ze které malloc přiděluje paměť), místo ze sekce s kódem (kde se normálně nachází proveditelný kód). Pro takové chování programu existuje několik vysvětlení.
Kompilátory JIT (Just in Time)
Jazyky, jako je Java, mohou generovat proveditelný kód za běhu programu a ukládat jej na haldě. Sysprof v takovém případě situaci hlásí správně.
Optimalizující kompilátory
Kompilátory C a C++ může v rámci optimalizace zahodit informace potřebné k určení volajícího funkce, proto jsou mylně zaměněné za [heap]. I tak lze říci, jak často jsou jednotlivé funkce programem volané, ale ne odkud.
U gcc můžete k předejití této optimalizace použít příznak -fno-omit-frame-pointer. Není ale potřeba vždy, například u kódu pro procesory x86_64 je potřeba jen při optimalizaci -03.
Pro získání podrobného a přesného stromu volání z neoptimalizovaného kódu použijte příznaky -ggdb -fno-omit-frame-pointer -O0.