4.4힙 세그먼트
힙 세그먼트(heap segment)는 프로그래머가 자유롭게 메모리를 할당하고 해제할 수 있는 공간입니다. 함수 호출이 끝나면 스택 프레임이 사라지면서 해제되는 지역 변수와 달리 힙 세그먼트에 할당한 메모리는 해제하지 않는 한 메모리 공간에 계속 남아 있습니다. 힙 세그먼트에 메모리를 할당한 다음 해제하지 않아 메모리가 계속 남아 있는 상황을 메모리 누수(memory leak)라고 합니다. 그림 9-2에서 힙에 있는 화살표는 힙이 늘어날 수 있는 방향을 의미한다고 했습니다. 힙은 스택과 달리 늘어날 수 있는 최대 크기가 정해져 있지 않다는 점이 중요합니다. C++ 코드를 통해 우리가 작성한 코드가 어느 세그먼트에 들어가는지 직접 살펴보겠습니다.
코드 9-1 memory/segment.cpp
#include <iostream> // CODE int add(int a, int b) { // #1 return a + b; } int subtract(int a, int b){ return a - b; } // DATA int global_x = 10; // #2 int main(void) { // STACK int local_x = 20; // #3 // HEAP int * heap_x = (int*)malloc(sizeof(int)); // #4 *heap_x = 30; free(heap_x); // #5 return 0; }