늘 겸손하게

CS - Operating System - 프로세스의 주소 공간 본문

Computer Science/Operating System

CS - Operating System - 프로세스의 주소 공간

besforyou999 2022. 11. 23. 21:40

프로세스 주소 공간은 코드, 데이터,  힙, 스택으로 이루어져 있다.

코드  : 프로그램 소스 코드 저장

 

데이터  : 전역 변수 저장

 

힙  : 동적 데이터 저장

 

스택 : 함수, 지역 변수 저장

 

메모리 주소 위에서부터 스택(Stack), 힙(Heap), 데이터(BSS segment, Data segment), 코드 (code segment)로 나뉘어집니다.


[ 스택 (Stack) ]

 

지역변수, 매개변수, 함수가 저장되고 컴파일 시에 크기가 결정되며 '동적'인 특징을 갖습니다.

 

스택 영역은 함수가 함수를 재귀적으로 호출하면서 동적으로 크기가 늘어날 수 있는데, 이때 힙과 스택의 메모리 영역이 겹치면 안 되기 때문에 힙과 스택 사이의 공간을 비워 놓습니다.

 


[ 힙 (Heap) ]

 

데이터 동적 할당 시 사용되며 런타임 시에 크기가 결정. 

 


[ 데이터 영역 ]

 

전역변수, 정적변수, 정적 프로그램이 종료되면 사라지는 변수가 들어 있는 영역.

 

데이터 영역은 BSS 영역, Data 영역으로 나뉘고, BSS 영역은 초기화가 되지 않은 변수가 0으로 초기화되어 저장되며 Data 영역(Data segment)는 0이 아닌 다른 값으로 할당된 변수들이 저장됩니다.

 


[ 코드 영역 ]

 

프로그램에 내장되어 있는 소스 코드가 저장된 영역.

 

이 영역은 수정 불가능한 기계어로 저장되어 있으며 정적인 특징을 가집니다.

 


왜 이렇게 구역을 나눈건가요?

 

최대한 데이터를 공유하여 메모리 사용량을 줄여야 합니다.

 

Code는 같은 프로그램 자체에서는 모두 같은 내용이기 때문에 따로 관리하여 공유

 

StackData를 나눈 이유는, 스택 구조의 특성과 전역 변수의 활용성을 위한 것!

 

 

 

 

출처

https://github.com/gyoogle/tech-interview-for-developer