티스토리 뷰
그저 저장소에 저장되어있는 데이터에 불과한 프로그램이 실행되기 위해서는 프로그램이 메모리에 LOAD되어 메모리 영역을 할당받아야 합니다.
이 때, 프로그램을 LOAD하고 메모리를 할당하는 작업은 OS에서 담당합니다.
그리고 프로그램이 할당받는 메모리는 용도에따라 크게 4가지 영역으로 나뉘어 집니다.
CODE(TEXT), DATA, HEAP, STACK
4가지 메모리 영역을 좀 더 세분화한 그림입니다.
출처 : 위키피디아
1. CODE ( or TEXT) Segment
- Code영역 혹은 Text영역 이라고 불립니다.
- 실행할 프로그램의 기계어 코드가 저장됩니다.
- 읽기 전용 데이터 입니다.
- rodata: 프로그램에 사용되는 상수값 데이터들이 저장됩니다. (e.g 1, "Text", "\n", 29305)
- CONST: 전역변수의 초기 데이터들이 전역변수에 저장되기 전에 저장됩니다.
2. DATA Segment
- 전역변수(global), 정적변수(static), 배열(array), 구조체(structure) 등이 저장됩니다.
- 프로그램 시작과 동시에 할당되고, 프로그램 종료 시 메모리에서 소멸됩니다.
- DATA에는 초기화된 전역변수, BSS에는 초기화 값이 없는 전역변수가 저장됩니다.
- 함수 내부에 선언된 Static 변수는 프로그램이 실행 될 때 공간이 할당되며, 함수가 실행될 때 초기화 됩니다.
3. HEAP Segment
- 사용자에 의해 메모리 공간이 동적으로 할당되고 해제되는 영역입니다.
- 메모리 주소 값에 의해 참조가 가능합니다.
- 힙 영역은 메모리의 낮은 주소에서 높은 주소의 방향으로 할당됩니다.
- C언어의 경우 할당받은 힙 영역을 명시적으로 반환해주어야 합니다. 반환하지 않는다면 메모리 누수의 원인이 될 수 있습니다.
- 메모리 관리를 자동으로 해주는 언어의 경우는 Garbage Collector 가 자동으로 반환해주지만, GC가 성능 저하의 원인이 되기도 합니다.
4. STACK Segment
- 함수의 호출과 관계되는 지역변수, 매개변수, 리턴 값 등의 임시데이터들이 저장되는 영역입니다.
- 함수의 호출과 함께 생성이 되었다가 함수의 종료 시 시스템에 반환됩니다.
- LIFO(Last In First Out)의 구조입니다.
- 메모리의 높은 주소에서 낮은 주소의 방향으로 할당됩니다.
- 할당된 스택의 크기는 고정이라 런타임 시에 변경할 수 없습니다.
- 이렇게 스택에 저장되는 함수의 호출 정보를 Stack Frame 이라고 합니다.
'Computer Science > OS' 카테고리의 다른 글
Virtual Memory (가상 메모리) (0) | 2019.01.07 |
---|---|
Process (0) | 2018.04.06 |
- Total
- Today
- Yesterday
- gitgnore
- commands
- 강화학습
- ausg
- sequelize
- #ausg
- Android
- Memory segmetation
- Android Studio
- MySQL
- branch
- Reinforcement Learning
- Reinforcement Learniing
- #AWS
- Algorithm
- Confustion Matrix
- git
- Preprocessing
- AWS
- MDP
- System
- Markov Decision Process
- Linux
- 통계적 가설 검정
- Gradient descent algorithm
- OS
- #handsonlab
- rl
- #ab
- p-value
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |