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.