C

[내배캠자습]C언어 챕터 8-1 : 힙 메모리

BreadMushroom 2026. 3. 29. 15:27

메모리 레이아웃(메모리 구조)

메모리 레이아웃은 크게 스택 메모리, 힙 메모리, 코드 섹션, 데이터 섹션으로 나뉩니다. 이번 단원에서 살펴볼 메모리는 힙 메모리입니다.

코드 섹션과 데이터 섹션

코드 섹션: 우리가 작성한 소스코드들이 빌드된 결과물들이 저장되는 곳입니다. 데이터 섹션: 전역 변수와 정적 변수등이 저장되는 곳입니다. 근데, 스택 메모리와 힙 메모리는 왜 나눴을까요?

 

스택 메모리의 단점

1️⃣

스택 메모리에 저장되는 지역 변수(배열 등)의 크기는 컴파일 타임에 고정됩니다. 런타임에 더 필요해진다 해도 크기를 늘릴 수 없습니다.

2️⃣

함수가 종료되면 해당 스택 프레임에 더이상 접근 불가능합니다. 즉, 지역변수의 수명은 함수의 수명과 함께합니다. 더 오래 보존하려면 전역변수 혹은 정적변수로 선언해야 합니다. 근데 이 변수들은 너무 또 극단적입니다. 프로그램의 수명과 함께합니다.

 

런타임 시에 프로그래머가 원하는 만큼(1번 만족) 원하는 때에 생성 및 삭제(2번만족) 가능한 메모리가 필요합니다.

 

힙 메모리(Heap Memory)

프로그래머의 메모리 할당과 해제를 통해 관리되는 동적 할당 영역입니다.

스택 메모리는 함수의 호출 및 종료에 따라 자동으로 정리됩니다만, 힙메모리는 아닙니다. 프로그래머가 원하는 만큼, 원하는 때에 할당 및 반납이 가능합니다. 이것이 힙 메모리의 장점입니다.

 

힙 메모리의 단점

1️⃣

스택 메모리에 비교해 할당/해제 속도가 느립니다. 스택 메모리는 자료구조 스택의 특성상 할당 및 해제에 O(1) 시간이 걸립니다. 힙 메모리는 할당 받아오려면 사용중이지 않은 메모리이면서 크기가 맞는지 체크 후 제공됩니다. 또한 메모리 공간에 구멍(메모리 단편화)이 생길 수도 있어서 효율적인 메모리 관리가 어렵기도 합니다.

2️⃣

프로그래머가 직접 메모리 할당 및 해제 해야합니다. 메모리 할당만 하고 해제는 안하는 실수를 할 여지가 있습니다.