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

    <info>
      <link type="guide" xref="index#faq"/>
    </info>
    <title>Co znamená heap?</title>

    <section id="what-does-heap-mean">
      <title>Co znamená „In file [heap]“?</title>

      <p>Znamená to, že sysprof věří, že funkce byla zavolaná odněkud z haldy programu (oblast, ze které <code>malloc</code> přiděluje paměť), místo ze sekce s kódem (kde se normálně nachází proveditelný kód). Pro takové chování programu existuje několik vysvětlení.</p>
    </section>

    <section id="jit">
      <title>Kompilátory JIT (Just in Time)</title>

      <p>Jazyky, jako je Java, mohou generovat proveditelný kód za běhu programu a ukládat jej na haldě. Sysprof v takovém případě situaci hlásí správně.</p>
    </section>

    <section id="optimizing">
      <title>Optimalizující kompilátory</title>

      <p>Kompilátory C a C++ může v rámci optimalizace zahodit informace potřebné k určení volajícího funkce, proto jsou mylně zaměněné za [heap]. I tak lze říci, jak často jsou jednotlivé funkce programem volané, ale ne odkud.</p>

      <note>
        <p>U gcc můžete k předejití této optimalizace použít příznak <code>-fno-omit-frame-pointer</code>. Není ale potřeba vždy, například u kódu pro procesory x86_64 je potřeba jen při optimalizaci -03.</p>
      </note>

      <note>
        <p>Pro získání podrobného a přesného stromu volání z neoptimalizovaného kódu použijte příznaky <code>-ggdb -fno-omit-frame-pointer -O0</code>.</p>
      </note>
    </section>
</page>
