Č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