stack: 함수를 호출할 때 지역변수, 매개변수, 리턴값이 저장된다. 함수가 종료되면 메모리에서 해제되어 스택 자료구조의 pop기능을 한다. 재귀 호출이 반복되면 스택영역에 함수의 지역변수 등이 계속 할당되다가 OS에서 할당한 스택 메모리 영역을 넘게되면 stack overflow가 발생한다. 높은주소에서 낮은주소로 메모리에 할당된다.
heap: 필요할 때마다 사용하는 동적 데이터 영역으로, 어느 정도 공간이 지정될지 알 수 없어 런타임에 결정된다. 동적으로 할당할 변수들이 저장되어 클래스나 참조 변수들이 저장된다. 낮은 주소에서 높은 주소로 할당된다.
ROM
code: 프로그램 실행 위한 명령어들이 저장된다. (제어문, 함수, 상수)
data: 코드의 전역변수, static 정적 변수가 저장된다. 프로그램 실행 전에 실행되어 프로그램 시작과 끝날 때까지 메모리에 할당되어 남아있다. 초기화된 변수 영역과 초기화되지 않은 변수영역(BSS)로 나뉜다.
프로세스에 할당되는 메모리의 각 영역에 대해서 설명해 주세요.