Mit jelent a kupac?
Mit jelent a „Fájlban [kupac]”?
Ez azt jelenti, hogy a sysprof azt hiszi, hogy egy függvényt valahonnan a program kupacából hívtak meg (ahol a malloc memóriát foglal le), nem pedig a kódszakaszból (ahol a futtatható kód általában található). Több lehetséges magyarázat is van.
JIT (Just in Time – magyarul: épp időben) fordítók
Az olyan nyelvek, mint a Java, képesek végrehajtható kódot előállítani a program futása közben, és azt a kupacban tárolni. A Sysprof ebben az esetben pontosan jelenti a helyzetet.
Fordítók optimalizálása
A C és C++ fordítók képesek optimalizálni a függvény hívójának meghatározásához szükséges információkat, ezért tévesen [kupac] lesz feltételezve. Továbbra is meg lehet mondani, hogy az egyes függvényeket milyen gyakran hívja a program, de azt már nem mindig, hogy honnan.
A gcc esetén a -fno-omit-frame-pointer jelző megakadályozza ezt az optimalizálást. A jelző nem mindig szükséges, például x86_64 gépeken csak az -O3 optimalizálással van rá szükség.
Ahhoz, hogy a legrészletesebb és legpontosabb hívásfát kapja a nem optimalizált kódból, használja ezeket a jelzőket: -ggdb -fno-omit-frame-pointer -O0