메모리 구조
기술노트
💻 프로그램 메모리 구조
프로그램이 실행될 때, 운영체제(OS)가 할당해주는 메모리 공간의 사용 방식에 대한 약속입니다.
📂 4가지 메모리 영역
- 코드(Code) 영역
- 실행할 코드가 기계어 형태로 저장되는 공간 (읽기 전용)
- 데이터(Data) 영역
- 전역 변수, 정적(static) 변수가 저장되는 공간
- 프로그램 시작부터 종료까지 계속 유지됨
- 힙(Heap) 영역
- 개발자가 직접 할당/해제하는 메모리 공간 (예: `new` 키워드)
- 런타임에 크기가 결정되며, 관리를 못하면 '메모리 누수' 발생
- 스택(Stack) 영역
- 함수 호출 시 지역 변수, 매개변수가 저장되는 공간
- 함수가 끝나면 자동으로 해제됨 (LIFO 구조)
🔥 스택 vs 힙 (Stack vs Heap)
구분 | 스택 (Stack) | 힙 (Heap) |
---|---|---|
관리 주체 | OS (자동) | 개발자 (수동) |
속도 | 빠름 | 느림 |
생명 주기 | 함수와 동일 | 직접 해제 전까지 |
용도 | 지역 변수 | 객체, 인스턴스 |
⚠️ 메모리 오버플로우
할당된 메모리 공간을 넘어서는 경우 발생합니다.
- 스택 오버플로우 : 스택 공간이 부족하여 힙을 침범 (주로 무한 재귀 시 발생)
- 힙 오버플로우 : 힙 공간이 부족하여 스택을 침범
💡 개발자 핵심 Point
- 메모리는 코드, 데이터, 힙, 스택 4가지로 나뉜다.
- 스택(Stack)은 빠르고 자동이지만 작다. (지역 변수)
- 힙(Heap)은 크고 유연하지만, 느리고 직접 관리해야 한다. (`new`로 생성된 객체)
- 함수를 너무 깊게 호출하거나 큰 데이터를 잡으면 스택 오버플로우가 발생할 수 있다.