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