할당 방법 | 종류 | 설명 |
Dynamic Allocation | Heap, Stack segment | 프로그램 실행 중 {} 블록단위 필요시 마다 메모리를 할당하고 , 수행 후 할당을 해제하여 시스템에 의해 혹은 원시코드로 제어된다. |
Static Allocation | Code, Data segment |
프로그램 시작에 할당되고 종료시에 해제된다. |
Segment의 정의
대개 64KB 논리적 크기 단위로 나뉘어 할당/해제로 관리하게 되는것
segment number + offset 으로 관리되고, 물리장치와 같은 크기로 나뉘어지는 페이지와 대비되는 개념이다.
Segment 가 왜 필요한가요?
명령어 한 개당 기억장소가 할당되어 저장되는 방식으로 프로그램이 수행될 경우 실행속도가 매우 느려진다.
따라서 일정한 크기의 메모리를 할당받고 (Segment) 관련된 명령어를 한번에 복사하여 저장하는 방식으로 Memory를 관리하기 위해 만들어졌다.
종류 | 설명 | e.g. |
Stack | 논리적 모듈인 함수 하나가 실행될 때 할당되고 함수 종료시 할당 해제되는 영역 | 지역변수, 매개변수 |
Heap | source code를 통해 프로그래머에 의해서 할당 / 해제되는 영역 | malloc |
Data | 문자열 리터럴, 전역변수, 정적 변수를 관리하는 영역 | %d %s %d, FAIL\0, PASS\0 |
Code | 함수 하나 당 한 개의 세그먼트를 할당하는 영역. | main, scanf, printf, #define 문자열상수 |
※ Code Segment는 읽기만 할 수 있는 영역이다. 따라서 Runtime도중 명령어나 데이터를 쓸 수 없다. (값을 바꿀 수 없다.)
다른 말로 text Segment라고도 한다.
'C' 카테고리의 다른 글
kDevelop Setting (0) | 2020.03.14 |
---|