Юрій Чорноіван
yurchor@ukr.net 2020

# Що таке «купа»?

# Що означає «У файлі [купа]»?

Це означає, що sysprof вважає, що функцію було викликано звідкись з купи програми (області, де пам'ять розподіляє `malloc`), а не з розділу коду (де зазвичай міститься виконуваний код). У цього може бути декілька пояснень.

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

Для мов, подібних до Java, можливе створення виконуваного коду безпосередньо під час запуску програми із збереженням його у купі. Sysprof у цьому випадку точно повідомляє про стан речей.

# Компілятори із оптимізацією

Компілятори C і C++ можуть оптимізувати (вилучати) дані, потрібні для визначення джерела виклику функції, тому таке джерело для [купи] буде помилковим. Ви зможете визначати, як часто викликається певна функція у програмі, але не завжди зможете визначити, звідки її виликають.

У gcc прапорець `-fno-omit-frame-pointer` вимикає оптимізацію такого різновиду. Явним чином вказувати цей прапорець не завжди потрібно. Наприклад, на архітектурі x86_64 він потрібен лише із оптимізацією -O3.

Щоб отримати найдокладніше і найточніше дерево викликів з неоптимізованого коду, скористайтеся такими прапорцями: `-ggdb -fno-omit-frame-pointer -O0`