Čo znamená „heap“?
Čo znamená „V súbore [heap]“?
To znamená, že aplikácia sysprof predpokladá, že funkcia bola volaná z nejakej časti haldy programu (heap), kde sa alokuje pamäť pomocou malloc, a nie zo sekcie kódu (kde obyčajne žije vykonateľný kód). Existuje niekoľko možných vysvetlení.
Kompilátory JIT (Just In Time)
Jazyky ako Java môžu počas behu programu generovať vykonateľný kód a ukladať ho do haldy (heap). Aplikácia Sysprof v tomto prípade presne hlási situáciu.
Optimalizujúce kompilátory
Kompilátory pre jazyky C a C++ môžu optimalizovať a odstrániť informácie potrebné na určenie volateľa funkcie, čo vedie k chybnému označeniu ako [heap]. Stále môžete zistiť, ako často je každá funkcia volaná programom, ale nie vždy viete, z ktorej časti.
Pre kompilátor gcc príznak -fno-omit-frame-pointer zabráni tejto optimalizácii. Príznak nie je vždy potrebný, napríklad na strojoch x86_64 je potrebný len pri optimalizácii -O3.
Ak chcete získať najpodrobnejší a najpresnejší strom volaní z neoptimalizovaného kódu, použite tieto príznaky: -ggdb -fno-omit-frame-pointer -O0