[운영체제] 메모리 구조
운영체제는 프로그램 실행을 위한 다양한 메모리 공간을 제공한다.
1. 코드(Code) 영역
- 실행할 프로그램의 코드가 저장되는 영역, text 영역이라고도 함
- Read-only, 컴퓨터가 이해 가능한 기계어로 번역
2. 데이터(Data) 영역
- 전역(global) 변수, 정적(static) 변수, 배열(array), 구조체(structure) 저장되는 영역
- 프로그램의 시작과 함께 할당, 종료 시 소멸
- 초기화된 영역은 data영역에, 초기화되지 않은 데이터는 bss(block stated symbol) 영역에 저장
- 실행 도중 전역 변수가 변경될 수 있어서 Read-Write로 지정
3. 힙(Heap) 영역
- 사용자에 의해 메모리 공간이 동적으로 할당, 소멸
- 메모리의 낮은 주소에서 높은 주소의 방향으로 할당
4. 스택(Stack) 영역
- 지역 변수, 매개변수가 저장되는 영역
- 함수의 호출과 함께 할당, 호출 완료 시 소멸
- 푸시(push) 동작으로 데이터 저장, 팝(pop) 동작으로 데이터 인출
- 후입선출(LIFO, last-in first-out) 방식에 따라 동작, 가장 늦게 저장된 데이터가 가장 먼저 인출
- 스택 영역에 저장되는 함수의 호출 정보를 스택 프레임(Stack Frame)이라 함, Call Stack
- 메모리의 높은 주소에서 낮은 주소의 방향으로 할당
* 스택과 힙 사이에 빈 메모리 공간 지원
- Heap Overflow : Heap영역이 Stack영역을 침범
- Stack Overflow : Stack영역이 Heap의 영역을 침범할때