프로세스가 실행되면 OS는 메모리 공간을 할당해주게 된다.
할당된 메모리는 다음과 같다.
해당 메모리는 읽기전용(Read-Only) 메모리이며
실행할 프로그램의 코드(Text)가 담겨있는 영역이다.
코드는 실행파일을 구성하는 명령어들이 올라가는 메모리 영역으로 함수, 제어문, 상수 등이 여기에 지정된다
전역변수, static변수와 같이 프로그램 시작과 동시에 할당되는 데이터들이 여기에 담긴다 프로그램이 종료되면 소멸된다.
읽기/쓰기가 가능하다.
프로그램이 자동으로 사용하는 임시 메모리 영역
함수 호출시 스택메모리가 생성되고 지역변수와 매개변수가 저장된다.
함수 호출이 끝나면 사라진다.
개발자가 직접 allocation/free 할 수 있는 메모리 공간이다.
Java와 같은 GC(Garbage Collector)가 있는 언어는 GC가 알아서 할당 및 해제를 해준다.
이 공간에 메모리를 할당하는 것을 동적할당 (Dynamic Memory Allocation)이라고 한다.
Heap과 Stack은 같은 공간을 공유한다. Heap은 메모리 위쪽부터 아래쪽으로 할당되고 Stack은 메모리공간 아래쪽부터 위쪽으로 할당된다.
그래서 각 메모리 공간을 침범할 수 있는 일이 발생할 수 있는데 이를 각각 Heap Overflow, Stack Overflow라고 한다.