프로세스의 메모리 구조
운영체제는 프로세스에 적절한 메모리를 할당하는데,
일정한 구조를 기반으로 할당한다.
메모리는 위에서부터
스택(stack),
힙(heap),
데이터 영역(BSS segment, Data segment),
코드 영역(code segment)으로
나눠진다.
- 스택: 지역변수, 매개변수, 함수가 저장되고, 컴파일 시 크기가 결정된다. 그러나 함수가 함수를 호출 하는 등에 따라 런타임 시에도 크기가 변경된다. 동적인 특징.
- 힙: 힙은 동적 할당에 사용되며 런타임 시 크기가 결정된다. 동적인 특징.
- 데이터 영역: BSS(Block Starting Symbol) 영역과 Data 영역으로 나뉘고, 정적할당에 관한 부분을 담당한다. 정적인 특징.
- 코드 영역: 소스코드가 들어간다. 정적인 특징.
정적 할당
정적 할당은 컴파일 단계에서 메모리를 할당하는 것을 말한다.
BSS segment와 Data segment, code/text segment로 나뉘어 저장된다.
BSS segment
BSS segment에는 전역변수, static, const로 선언된 변수 중
0으로 초기화, 또는 초기화가 어떤 값으로도 되어 있지 않은 변수들이 할당된다.
Data segment
Data segment에는 전역변수, static, const로 선언된 변수 중
0이 아닌 값으로 초기화된 변수가 할당된다.
code/text segment
code/text segment에는 프로그램의 코드가 들어간다.
동적 할당
동적 할당은 런타임 단계에서 메모리를 할당받는다.
stack과 heap으로 나뉜다.
stack
stack은 지역변수, 매개변수, 실행되는 함수에 의해 늘어나거나 줄어드는 메모리 영역이다.
함수가 호출될 때마다 호출된 환경 등 특정 정보가 stack에 계속해서 저장된다.
재귀함수가 호출될 때 새로운 스택 프레임이 매번 사용되어
함수 내의 변수 집합이 해당 함수의 다른 인스턴스 변수를 방해하지 않는다.
heap
heap은 동적으로 할당되는 변수들을 담는다.
malloc(), free() 함수를 통해 관리할 수 있으며,
동적으로 관리되는 자료구조의 경우 heap 영역을 사용한다.
예를 들어, vector는 내부적으로 heap 영역을 사용한다.
참고: inflearn 강의 'CS 지식의 정석 - 큰돌'
'컴퓨터 공학 & 통신' 카테고리의 다른 글
[개념 정리/운영체제] 프로세스 상태 (0) | 2023.07.26 |
---|---|
[개념 정리/운영체제] PCB & 컨텍스트 스위칭 (0) | 2023.07.26 |
[개념 정리/운영체제] 프로그램 컴파일 과정 (0) | 2023.07.26 |
[개념 정리/운영체제] 프로세스 vs 스레드 (0) | 2023.07.26 |
[개념 정리/운영체제] 페이지 교체 알고리즘 - FIFO, LRU, NUR, LFU (1) | 2023.07.26 |