# 힙은 무엇인가요?

# "파일 [힙] 내부"는 무엇인가요?

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

# JIT (Just in Time) 컴파일러

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

# 컴파일러 최적화

C 와 C++ 컴파일러는 함수 호출자를 결정하는데 필요한 정보를 최적화할 수 있어 [힙]으로 오해할 수 있습니다. 프로그램에서 호출한 각 함수를 얼마나 자주 호출하는지 확인 요청할 수 있지만 항상 그런 것은 아닙니다.

GCC에서는 `-fno-omit-frame-pointer` 플래그로 최적화를 막습니다. 이 플래그가 항상 필요한건 아니지만, x86_64 머신의 경우 -O3 최적화 플래그를 사용할 경우에만 필요합니다.

최적화하지 않은 코드에서 더 자세하고 정확한 호출 트리 정보를 가져오려면 `-ggdb -fno-omit-frame-pointer -O0` 플래그를 사용합니다.