SMA(Static Memory Allocation) : 정적 메모리, 메모리의 data, stack 영역을 사용
DMA(Dynamic Memory Allocation) : 동적 메모리, 메모리의 heap 영역을 사용한다.
1. code 영역
- 코드 자체를 구성하는 메모리 영역으로 Hex 파일이나 BIN 파일 메모리다.
- 프로그램 명령이 위치하는 곳으로 기계어로 제어되는 메모리 영역이다.
2. data 영역
- 전역변수(global), 정적변수(static), 배열(array), 구조체(structure) 등이 저장된다.
1) 초기화 된 데이터는 data 영역에 저장된다. ex ) int num=1;
2) 초기화 되지 않은 데이터는 BSS(Block Stated Symbol) 영역에 저장된다. ex ) int a;
- 컴파일 시 기억장소가 할당되어 프로그램 실행부터 종료 시까지 데이터 공간 존재한다.
- 전역변수는 함수 외부에 선언되며, 어떤 함수에서든 사용 가능하다.
- static 변수는 프로그램 실행되자마자 데이터 영역의 메모리를 차지하며, 바로 기본 값인 0으로 초기화한다.
3. heap 영역
- 필요에 의해 동적으로 메모리를 할당하는 영역이다. 해제 또한 사용자가 직접 해야 한다.
- 할당해야 할 메모리의 크기를 프로그램이 실행되는 동안 결정해야 하는 경우(런 타임) 유용하게 사용되는 공간이다.
4. stack 영역
- 지역(local) 변수, 매개변수(parameter), 리턴 값 등의 데이터를 저장하는 영역
- 함수 호출이 완료되면 지역변수 공간도 같이 사라진다.
- 스택 사이즈는 각 프로세스마다 할당되지만 프로세스가 메모리에 로드 될 때 스택 사이즈가 고정되어 있어, 런타임 시에 스택 사이즈를 바꿀 수 없다.
'system' 카테고리의 다른 글
메시지 루프와 처리 함수의 전체 순서 (0) | 2016.01.07 |
---|---|
BOF protection techniques (0) | 2016.01.03 |
plt, got (0) | 2015.12.30 |
gdb 명령어 (0) | 2015.11.10 |
ShellShock 취약점(CVE-2014-6271 : Remote code execution through bash) (0) | 2015.10.26 |