-
C 메모리 레이아웃Note/운영체제 2020. 11. 27. 16:27
출처: http://www.geeksforgeeks.org/memory-layout-of-c-program/ <출처 - www.slideshare.net > 1. Stack
정적 바인딩을 하는 변수들 : 지역변수(상수 문자열 제외 -> Text 세그먼트)
2. Heap
동적 할당 변수*Stack의 데이터처럼 자동 소멸하지 않기 때문에 메모리 누수에 주의 해야한다.
3. Data 영역1) BSS 세그먼트
초기화되지 않은 전역변수, 초기화되지 않은 정적변수
=> BSS 세그먼트는 런타임 시에 블록 크기만큼 세그먼트를 할당하고 이 영역을 0으로 초기화함.
따라서, 전역변수와 정적변수는 별도로 초기화하지 않으면 0으로 초기화됨.
2) . Data 세그먼트(DS) = Code 세그먼트
초기화된 전역변수, 초기화된 정적변수
4. Text 세그먼트
* 프로그램 코드(변수 아닌 소스코드), 함수, 전역 상수, 문자열
* 읽기 전용1) init(const) 영역
- 선언과 동시에 초기화된 변수의 상수 가 기록된다.
- 즉, 리터럴 타입(순수한 상수)가 저장된다.
예)
2) rodata 영역
- init 영역에서 저장되지 않았던 상수들을 모두 저장한다.
예)
데이터 적치 순서:
1. 실행파일 내의 코드를 가장 먼저 적치
2. 컴파일시 결정되는 변수(전역변수, 상수)를 적치 시킨다.
3. 그 외의 모든 변수들은 런타임때 생성되어 저장된다.
( 런타임 때 stack과 heap영역에 적치되는 것 )
** 전체 메모리는 낮은 주소로부터 순서대로 적치 된다. 예외적으로 스택만 높은 주소로부터 낮은 주소 순으로 적치된다.
** 구분을 쉽게 하기 위함.
'Note > 운영체제' 카테고리의 다른 글
리얼타임 스케줄링 (0) 2020.11.27 프로세스 Subsystem (0) 2020.11.27 파일 시스템 (0) 2020.11.27 Boot up : 디바이스의 첫 동작 (0) 2020.11.27 운영체제 학습 목차 (0) 2020.11.27