# 프로세스의 메모리 구조 ![](https://i.imgur.com/HvlGH1o.png) 프로그램의 메모리 구조는 다음과 같은 영역으로 나뉜다 - 코드 영역(Code Area) - 실행할 프로그램의 코드, 상수, 리터럴 등이 저장된다. - 읽기 전용으로, 코드가 메모리에 로드되는 시점에 할당된다. - 데이터 영역(Data Area) - 전역 변수, 정적 변수 등이 저장되는 영역이다. - 프로그램 시작 시 할당되며, 종료 시 해제된다. - 힙 영역(Heap Area) - 동적 메모리 할당을 위한 영역이다. - 프로그래머가 직접 메모리를 할당 및 해제해야 한다. - 런타임 중 메모리의 크기가 변동할 수 있다. - 스택 영역(Stack Area) - 함수 호출 시 생성되는 지역 변수, 매개 변수 및 반환 주소가 저장된다. - 함수 호출이 완료되면 자동으로 메모리가 해제된다. - 후입선출(LIFO) 방식으로 관리된다. ## 스택과 힙 ![](https://i.imgur.com/4hZCrrd.png) - 스택 영역과 힙 영역은 모두 프로그램의 메모리 공간이다. - 프로세스는 데이터를 저장할 때 스택 영역과 힙 영역 중 하나를 선택한다. - 소멸 시점이 명확한 변수는 스택 영역에, 그렇지 않은 변수는 힙 영역에 저장한다 - 함수 내에서 선언된 변수인 지역 변수는 함수가 호출될 때 생성되고, 함수가 종료되면 소멸하므로, 소멸 시점이 명확하여 스택 영역에 저장된다 - 동적으로 할당된 변수는 소멸 시점을 알 수 없으므로 힙 영역에 저장된다 - C : `malloc()`, `free()` - C++ : `new` - Java : `new`