# 프로세스의 메모리 구조

프로그램의 메모리 구조는 다음과 같은 영역으로 나뉜다
- 코드 영역(Code Area)
- 실행할 프로그램의 코드, 상수, 리터럴 등이 저장된다.
- 읽기 전용으로, 코드가 메모리에 로드되는 시점에 할당된다.
- 데이터 영역(Data Area)
- 전역 변수, 정적 변수 등이 저장되는 영역이다.
- 프로그램 시작 시 할당되며, 종료 시 해제된다.
- 힙 영역(Heap Area)
- 동적 메모리 할당을 위한 영역이다.
- 프로그래머가 직접 메모리를 할당 및 해제해야 한다.
- 런타임 중 메모리의 크기가 변동할 수 있다.
- 스택 영역(Stack Area)
- 함수 호출 시 생성되는 지역 변수, 매개 변수 및 반환 주소가 저장된다.
- 함수 호출이 완료되면 자동으로 메모리가 해제된다.
- 후입선출(LIFO) 방식으로 관리된다.
## 스택과 힙

- 스택 영역과 힙 영역은 모두 프로그램의 메모리 공간이다.
- 프로세스는 데이터를 저장할 때 스택 영역과 힙 영역 중 하나를 선택한다.
- 소멸 시점이 명확한 변수는 스택 영역에, 그렇지 않은 변수는 힙 영역에 저장한다
- 함수 내에서 선언된 변수인 지역 변수는 함수가 호출될 때 생성되고, 함수가 종료되면 소멸하므로, 소멸 시점이 명확하여 스택 영역에 저장된다
- 동적으로 할당된 변수는 소멸 시점을 알 수 없으므로 힙 영역에 저장된다
- C : `malloc()`, `free()`
- C++ : `new`
- Java : `new`