Programming - 메모리 레이아웃
Memory Layout
커널 영역 vs 사용자 영역
메모리 레이아웃은 커널 영역과 사용자 영역으로 나뉜다.
커널 영역은 사용자가 접근할 수 없으며 운영체제도 하나의 프로그램이기 때문에, 메모리에 올라가게 되는데 사용자 영역과 분리된 공간이다.
사용자 영역은 커널 영역을 제외한 나머지 영역으로 사용자가 접근할 수 있으며, 응용프로그램(APP)이 동작하기 위해 사용되는 메모리 공간이다.
커널 영역
OS Kernel : User의 Code가 읽거나 쓸 수 없다. 운영체제가 올라가는 메모리 공간으로, 가장 높은 주소에 위치한다.
사용자 영역
Stack : 지역변수와 매개변수, 그리고 함수의 return address가 올라가는 영역으로, 커널의 영역은 지키며 전체 메모리를 활용하기 위해서 높은 주소에서 낮은 주소로 적재 된다. 또한 힙 영역을 침범할 수 있다.
Heap : 동적 할당한 변수들이 올라가는 영역으로, 낮은 주소에서 높은 주소로 적재 된다. 스택과 마찬가지로 스택 영역을 침범하며 한정된 메모리 공간을 최대한 활용한다.
Bss : 초기화되지 않은 정적 변수, 전역 변수 및 Zero의 값을 가진 멤버 변수들이 올라가는 영역.
Data : 명시적으로 초기화된 정적 변수, 전역 변수가 적재.
Text : 프로세스의 이진 코드가 저장되는 영역.
댓글남기기