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

코드 섹션과 데이터 섹션
코드 섹션: 우리가 작성한 소스코드들이 빌드된 결과물들이 저장되는 곳입니다. 데이터 섹션: 전역 변수와 정적 변수등이 저장되는 곳입니다. 근데, 스택 메모리와 힙 메모리는 왜 나눴을까요?
스택 메모리의 단점
1️⃣
스택 메모리에 저장되는 지역 변수(배열 등)의 크기는 컴파일 타임에 고정됩니다. 런타임에 더 필요해진다 해도 크기를 늘릴 수 없습니다.
2️⃣
함수가 종료되면 해당 스택 프레임에 더이상 접근 불가능합니다. 즉, 지역변수의 수명은 함수의 수명과 함께합니다. 더 오래 보존하려면 전역변수 혹은 정적변수로 선언해야 합니다. 근데 이 변수들은 너무 또 극단적입니다. 프로그램의 수명과 함께합니다.
런타임 시에 프로그래머가 원하는 만큼(1번 만족) 원하는 때에 생성 및 삭제(2번만족) 가능한 메모리가 필요합니다.
힙 메모리(Heap Memory)
프로그래머의 메모리 할당과 해제를 통해 관리되는 동적 할당 영역입니다.
스택 메모리는 함수의 호출 및 종료에 따라 자동으로 정리됩니다만, 힙메모리는 아닙니다. 프로그래머가 원하는 만큼, 원하는 때에 할당 및 반납이 가능합니다. 이것이 힙 메모리의 장점입니다.
힙 메모리의 단점
1️⃣
스택 메모리에 비교해 할당/해제 속도가 느립니다. 스택 메모리는 자료구조 스택의 특성상 할당 및 해제에 O(1) 시간이 걸립니다. 힙 메모리는 할당 받아오려면 사용중이지 않은 메모리이면서 크기가 맞는지 체크 후 제공됩니다. 또한 메모리 공간에 구멍(메모리 단편화)이 생길 수도 있어서 효율적인 메모리 관리가 어렵기도 합니다.
2️⃣
프로그래머가 직접 메모리 할당 및 해제 해야합니다. 메모리 할당만 하고 해제는 안하는 실수를 할 여지가 있습니다.
'C' 카테고리의 다른 글
| [내배캠자습]C언어 챕터 9-1 : 구조체 (0) | 2026.03.29 |
|---|---|
| [내배캠자습]C언어 챕터 8-2 : 동적할당과 메모리 소유권 문제 (0) | 2026.03.29 |
| [내배캠자습]C언어 챕터 7-3 : NULL과 void 포인터 (0) | 2026.03.29 |
| [내배캠자습]C언어 챕터 7-2 : 주소 연산자와 역참조 연산자 (0) | 2026.03.29 |
| [내배캠자습]C언어 챕터 7-1 : 포인터 (0) | 2026.03.29 |