본문 바로가기
Programming/기술 면접

[개발자 기술 면접 대비] 🧠 메모리 구조의 네 가지 영역 설명

by Mandy's 2025. 7. 25.

프로그램이 실행되기 위해서는 메모리에 적절히 로드되어야 하며,
운영체제는 실행을 위해 RAM 내부를 네 가지 영역으로 나누어 관리합니다.

이 네 가지는 바로 Code, Data, Heap, Stack 영역입니다.


1️⃣ Code 영역

  • 기계어로 번역된 코드(함수, 명령어 등)가 저장되는 공간
  • 보통 읽기 전용으로 되어 있어 수정이 불가능
  • CPU가 직접 이 영역을 읽어 명령을 실행

🧩 예: C, Python 등에서 작성한 함수들의 기계어 코드


2️⃣ Data 영역

  • 프로그램 실행 중 사용되는 전역 변수(Global variable)정적 변수(Static variable)가 저장됨
  • 프로그램이 시작될 때 할당, 종료 시 해제
  • 초기화된 데이터와 초기화되지 않은 데이터를 나누어 관리하기도 함

🧩 예: static int count = 0; 같은 변수


3️⃣ Heap 영역

  • 동적으로 메모리를 할당할 때 사용하는 영역
  • 런타임에 크기가 결정되는 데이터가 저장됨
  • 프로그래머가 직접 할당과 해제를 관리해야 함

언어 메모리 관리 방식

C/C++ malloc() / free() 등 수동 관리
JavaScript, Java Garbage Collector에 의해 자동 해제
Swift ARC (Automatic Reference Counting) 방식
  • 메모리의 낮은 주소 → 높은 주소 방향으로 확장됨
  • 메모리 누수(memory leak) 위험이 존재함

🧩 예: 사용자 입력 크기만큼 배열을 동적으로 할당할 때


4️⃣ Stack 영역

  • 함수 호출 시마다 생성되는 스택 프레임이 저장됨
  • 지역 변수, 매개변수, 복귀 주소 등이 포함됨
  • 함수 호출이 끝나면 자동으로 해제됨
  • 후입선출(LIFO) 구조
  • 높은 주소 → 낮은 주소 방향으로 확장됨

❗재귀 호출이 깊어지거나, 스택 공간 초과 시 stack overflow 오류 발생

🧩 예: 함수 내 지역 변수 int a = 10;


🔄 힙과 스택의 메모리 상호작용

메모리는 다음과 같은 구조로 배치됩니다:

+----------------------+  ← 낮은 주소
|   Code 영역          |
+----------------------+
|   Data 영역          |
+----------------------+
|   Heap 영역          |
|   ↓ 아래 방향 성장    |
+----------------------+
|                      |
|   (Unused 공간)       |
|                      |
+----------------------+
|   ↑ 위로 성장         |
|   Stack 영역         |
+----------------------+  ← 높은 주소
  • Heap과 Stack은 서로 반대 방향으로 성장
  • 시스템에 따라 힙이 커지면 스택 영역이 줄어들고, 스택이 커지면 힙이 줄어듦
  • 즉, 이 둘은 동시에 무한정 사용할 수 없으며 상호 영향 존재

🎯 마무리 요약

영역 주요 내용 성장 방향

Code 기계어 코드 고정
Data 전역/정적 변수 고정
Heap 동적 메모리 아래로 성장
Stack 함수 호출 데이터 위로 성장