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

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

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

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

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

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

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

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

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