• 스택(stack): 지역 변수, 함수의 매개변수(parameter), 반환되는 주소 값 등이 저장되는 영역이다. 높은 주소 값에서 낮은 주소 값으로 메모리가 할당되며, 영역 크기는 컴파일 때 결정된다.
• 힙(heap): 사용자에 의해 동적 메모리 할당이 일어나는 영역이다. C 언어에서 malloc()으로 할당되는 영역이라고 보면 된다. 낮은 주소 값에서 높은 주소 값으로 메모리가 할당되며, 영역 크기는 런타임 때 결정된다.
• 데이터(data): 전역 변수, 정적 변수, 배열, 구조체 등이 저장되는 영역이다. 데이터 영역은 세부적으로 BSS(Block Stated Symbol) 영역과 데이터 영역으로 다시 나눌 수 있다. BSS 영역은 초기화하지 않은 변수를, 데이터 영역은 초기화한 변수를 저장한다.
• 코드(code): 실행할 코드가 기계어로 컴파일되어 저장되는 영역으로, 텍스트(text) 영역이라고도 한다.
여기서 스택 영역과 힙 영역은 동적으로 메모리 할당이 가능해 두 영역 사이에 빈 메모리 공간이 존재한다. 스택 영역은 LIFO(Last In First Out, 후입선출) 방식으로, 높은 주소 값에서 낮은 주소 값 순서로 사용한다. 힙 영역은 FIFO(First In First Out, 선입선출) 방식으로, 낮은 주소 값에서 높은 주소 값 순서로 사용한다.