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

    <info>
      <link type="guide" xref="index#faq"/>
    </info>
    <title>힙은 무엇인가요?</title>

    <section id="what-does-heap-mean">
      <title>"파일 [힙] 내부"는 무엇인가요?</title>

      <p>시스프롭에서는 함수를 코드 섹션(실행 코드가 들어간 영역)이 아닌 프로그램의 힙(<code>malloc</code>으로 할당한 메모리 위치) 어딘가에서 호출한다고 간주합니다. 몇가지 가능한 설명은 다음과 같습니다.</p>
    </section>

    <section id="jit">
      <title>JIT (Just in Time) 컴파일러</title>

      <p>Java 같은 프로그래밍 언어는 프로그램을 실행하는 동안 실행 코드를 생성하고 힙에 저장할 수 있습니다. 시스프롭에서는 이 경우의 상황을 실제로 보고서로 작성합니다.</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>
