1) 먼저, Stack은 함수가 호출됨과 동시에 생성되며, 함수를 실행하는 동안 쓰이는 지역변수, 매개변수가 저장되는 곳이다. 또한, 함수가 끝남에 따라 반환된다. 이러한 stack은 프로그램이 자동으로 사용하는 메모리 영역이다. 여기서도 stack이 넘치면 stack overflow가 발생한다.
2) 다음으로 Heap은 프로그래머가 동적으로 할당하여 사용하는 메모리 영역으로 동적 메모리 영역이라고 한다. C언어에서는 malloc이라는 함수로 동적 메모리의 사이즈를 지정해준뒤 생성후에 사용할 수 있다(이 때, memory leak을 막기 위해 생성한 다음에 사용하고, 반드시 free함수로 할당해준 메모리를 해제시켜줘야 시스템 메모리 부족현상이 일어나지 않는다. 스택은 따로 해제 과정이 필요없으나 heap은 필요함!).
3) 세 번째로, data가 있는데, data는 프로그램이 실행될 때 생성되고 프로그램이 종료되면 시스템에 반환되며, 전역변수, 정적변수, 배열, 구조체 등이 저장된다. Data 영역은 다시 BSS(Block Stated Symbol) 영역과 Data(GVAR) 영역으로 나누어지는데, 초기화된 데이터는 Data 영역에 저장되고(ROM), 초기화되지 않은 데이터는 BSS 영역에 저장된다(RAM). 이유는 초기화된 데이터와 초기화되지 않은 데이터를 둘다 ROM에 넣으면 큰 사이즈의 ROM이 필요해지기 때문이다.
4) 마지막으로 Text(Code)는 실행 명령을 포함하는 코드들이 들어가는 부분이다. 프로그램을 시작 할 때 컴파일한 프로그램(기계어)이 저장되어 있고, 읽기 전용 영역이기에 프로세스가 함부로 변경 할 수 없고 변경 시 오류를 발생시킨다.