[운영체제] 메모리 구조

최대 1 분 소요

운영체제는 프로그램 실행을 위한 다양한 메모리 공간을 제공한다.

image

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의 영역을 침범할때