<?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="ru">

    <info>
      <link type="guide" xref="index#faq"/>
    
    <mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
      <mal:name>Ser82-png</mal:name>
      <mal:email>asvmail.as@gmail.com</mal:email>
      <mal:years>2022</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>
