프로세스의 주소 공간

Code, Data, BSS, Heap, Stack

 

코드 (Code / Text)

  • 작성한 코드가 기계어 명령으로 변환되어 저장되는 영역
  • 이 부분은 컴파일 후에 바뀌지 않으므로 같은 프로그램에서 이 코드 부분을 공유하여 메모리 사용량을 줄이기 위해 존재

데이터 (Data)

  • 초기화된 전역 변수, 정적 변수와 배열, 구조체가 존재,
  • 프로그램 실행 시 생성, 종료 시 반환,
  • 함수 내부 정적 변수는 프로그램 실행 시 공간만 할당하고 함수 실행 시 초기화

BSS (Block Stated Symbol)

  • 초기화되지 않은 데이터 저장

힙 (Heap)

  • 동적 할당 (malloc, new)된 데이터가 저장, 런타임에 크기가 결정,
  • 힙 영역에 할당한 다 쓴 메모리를 반환하지 않으면 메모리가 부족해지는 것을 ‘메모리 누수’

스택 (Stack)

  • 임시 메모리 영역으로 지역 변수, 매개 변수, 반환 값 등이 잠시 저장, 함수의 호출이 끝나고 돌아갈 반환 주소, 함수 내의 지역 변수 등이 저장되는 정보를 ‘스택 프레임’이라고 함
  • 런타임에 크기가 결정되지만, 런타임에 스택의 총 사이즈를 변경 못함

추가 정보

  • 코드,데이터,스텍 영역은 컴파일러가 결정, 힙은 개발자가 결정
  • 스택은 상위 메모리부터 할당, 나머지는 하위 메모리부터 할당

오버플로우

  • heap overflow : heap이 주소 값을 채우며 내려오다가 stack 영역을 침범
  • stack overflow : stack이 밑에서부터 주소 값을 채우며 올라오다가 heap 영역을 침범

 

프로세스의 주소 공간

 

 

Reference

[동적 할당- 런타임, 컴파일 할당] 

 

'CS > 운영체제 (OS)' 카테고리의 다른 글

8. IPC (Inter-Process Communication)  (0) 2021.08.11
7. 프로세스 vs 스레드  (0) 2021.08.11
3. 인터럽트 (Interrupt)  (1) 2021.08.08
2. 커널 (Kernel)  (0) 2021.08.06
1. 운영체제 (OS) & 부팅과정  (0) 2021.08.06

+ Recent posts