프로그램이 CPU에 의해 실행되면 프로세스가 생성되고 메모리에 프로세스 주소 공간이 할당된다.
프로세스 주소 공간
프로세스 주소 공간은 코드, 데이터, 스택, 힙 영역으로 이루어져 있다.
- Code(Text) Segment : 프로그램 소스 코드 저장, read only
- Data Segment : 전역 변수, static 등 저장, read & write
- 초기화된 데이터는 Data 영역에 저장, 초기화되지 않는 데이터는 BSS 영역에 저장된다.
- Stack Segment : 함수(복귀할 주소, 리턴 값 …), 지역 변수 저장, read & write
- 컴파일 시 Stack 영역의 크기가 결정되기 때문에 무한정 할당할 수 없다. > stack overflow 발생 가능
- Heap Segment : 런타임 시정에 결정되는 메모리 영역
Code 구역을 나눈 이유?
코드는 프로그램이 만들어진 후에는(컴파일된 후) 바뀔 일이 없기 때문에 읽기만 가능한 별개의 segment로 나누어 관리한다. 같은 프로그램을 실행시켜 여러 개의 프로세스가 실행되어도 코드 부분은 같은 내용을 가지고 있게 된다. 따라서 같은 프로그램의 프로세스일 경우 Code segment를 공유해서 메모리 사용량을 줄인다.
Stack과 Data 구역을 나눈 이유?
Stack과 Data segment로 나눈 이유는 스택 구조의 특성과 전역 변수의 활용성을 위해서 이다. 프로그램의 함수와 지역변수는 LIFO 특성을 가진 스택에서 실행된다. 전역변수는 어떤 함수에서도 접근 가능하기 때문에 Data Segment로 관리한다.
💡 Data 영역과 BSS 영역
참고: DATA, BSS
- Data 영역 : 프로그램 실행 도중 자유롭게 접근하여 수정 및 변경이 가능하다.
- BSS 영역 : 메모리 상에 공간만 잡아두고 실제로 변수를 초기화시키지 않는다.
데이터 영역은 초기에 사용할 메모리를 확보하는 반면 BSS 영역에서는 런타임 후에야 메모리 영역이 확보된다. 즉, 메모리 사용면에서는 BSS 영역을 사용하는 것이 효율적이다.
'CS' 카테고리의 다른 글
[Java] HashMap (0) | 2023.07.20 |
---|---|
[알고리즘] 최대 공약수 구하기 - 유클리드 호제법 (0) | 2023.07.18 |
[CS 스터디] 인터럽트 (Interrupt) (0) | 2023.07.17 |
[CS 스터디] 운영체제(Operating System) (0) | 2023.07.13 |
[CS 스터디] 프로세스 (Process), 스레드 (Thread) (0) | 2023.07.13 |