<?xml version="1.0" encoding="utf-8"?>
<page xmlns="http://projectmallard.org/1.0/" xmlns:its="http://www.w3.org/2005/11/its" type="topic" id="faq" xml:lang="uk">

    <info>
      <link type="guide" xref="index#faq"/>
    
    <mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
      <mal:name>Юрій Чорноіван</mal:name>
      <mal:email>yurchor@ukr.net</mal:email>
      <mal:years>2020</mal:years>
    </mal:credit>
  </info>
    <title>Що таке «купа»?</title>

    <section id="what-does-heap-mean">
      <title>Що означає «У файлі [купа]»?</title>

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

    <section id="jit">
      <title>Компілятори JIT («на льоту»)</title>

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

    <section id="optimizing">
      <title>Компілятори із оптимізацією</title>

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

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

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