Какво е динамична памет?

Какво означава „В файл [динамична памет]“?

Това означава, че „sysprof“ смята, че функцията е извикана някъде в динамичната памет на програмата (където malloc заделя памет), а не в часта с код (където обикновено се намира изпълнимият код.) Има няколко възможни обяснения.

JIT (динамична компилация) компилатори

Езици като Java могат да генерират изпълним код, докато програмата работи, и да го съхраняват в динамичната памет. В този случай „Sysprof“ точно отчита ситуацията.

Оптимизиране на компилатори

C и C++ могат да оптимизират информацията, необходима за определяне на извикващия на функцията, така че тя се бърка с [динамична памет]. Все още може да определите колко често всяка функция се извиква от програмата, но не винаги откъде.

За gcc флагът -fno-omit-frame-pointer ще предотврати тази оптимизация. Флагът не винаги е необходим, например на x86_64 машини той е необходим само при -O3 оптимизация.

За да получите най—подробно и точно дърво на извикванията от неоптимизиран код, използвайте тези флагове: -ggdb -fno-omit-frame-pointer -O0