본문 바로가기

system

메모리 구조

 

 

 

 

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