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

    <info>
      <link type="guide" xref="index#faq"/>
    
    <mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
      <mal:name>Anders Jonsson</mal:name>
      <mal:email>anders.jonsson@norsjovallen.se</mal:email>
      <mal:years>2016</mal:years>
    </mal:credit>
  </info>
    <title>Vad betyder heap?</title>

    <section id="what-does-heap-mean">
      <title>Vad betyder ”In file [heap]”?</title>

      <p>Detta betyder att sysprof tror att en funktion anropades från någonstans i programmets heap (där <code>malloc</code> allokerar minne) snarare än kodavsnittet (där körbar kod vanligen befinner sig.) Det finns flera möjliga förklaringar.</p>
    </section>

    <section id="jit">
      <title>JIT-kompilatorer (Just in Time)</title>

      <p>Språk som java kan generera körbar kod under tiden ett program körs och lagra den i heapen. Sysprof rapporterar situationen korrekt i detta fall.</p>
    </section>

    <section id="optimizing">
      <title>Optimera kompilatorer</title>

      <p>C- och C++-kompilatorer kan optimera bort information som krävs för att avgöra en funktions anropare, så den antas felaktigt vara [heap]. Du kan fortfarande avgöra hur ofta varje funktion anropas av programmet, men inte alltid från var.</p>

      <note>
        <p>För gcc kommer flaggan <code>-fno-omit-frame-pointer</code> förhindra denna optimering. Flaggan behövs inte alltid, på x86_64-behövs den exempelvis bara med optimeringen -O3.</p>
      </note>

      <note>
        <p>För att få det mest detaljerade och korrekta anropsträdet från icke-optimerad kod, använd dessa flaggor: <code>-ggdb -fno-omit-frame-pointer -O0</code></p>
      </note>
    </section>
</page>
