힙은 무엇인가요?

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

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

JIT (Just in Time) 컴파일러

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

컴파일러 최적화

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

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

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