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

    <info>
      <link type="guide" xref="index#faq"/>
    </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>
