Ser82-png
asvmail.as@gmail.com 2022

# Что означает «куча»?

# Что означает «В файле [куча]»?

Это означает, что sysprof считает, что функция была вызвана откуда-то из кучи программ (область, где память выделяет `malloc`), а не из раздела кода (где обычно находится исполняемый код). Этому есть несколько возможных объяснений.

# Компиляторы JIT («на лету»)

Такие языки, как Java, могут генерировать исполняемый код во время работы программы и сохранять его в куче. В этом случае Sysprof точно сообщает об этом.

# Компиляторы с оптимизацией

Компиляторы C и C++ могут оптимизировать информацию, необходимую для определения источника вызова функции, поэтому определение источника из [кучи] является ошибочным. Вы по-прежнему можете определить, как часто каждая функция вызывается программой, но не всегда откуда.

В gcc флаг `-fno-omit-frame-pointer` отключает эту оптимизацию. Он нужен не всегда, например на архитектуре x86_64 он нужен только с оптимизацией -O3.

Чтобы получить наиболее подробное и точное дерево вызовов из неоптимизированного кода, используйте следующие флаги: `-ggdb -fno-omit-frame-pointer -O0`