프로그램에서 메모리를 구분하는 방법은 컴파일러 제조사에 따라 조금씩 다르지만 대략 다음과 같이 4 종류의 세그먼트들로 나눕니다.
1. Code Segment :
프로그램 코드가 들어 있는 부분.
2. Data Segment
전역 변수와 static 변수들이 저장되어 있는 부분
3. Stack Segment
로컬 변수들이 저장되어 있는 부분
4. Heap Segment
free space로서 dynamic allocation 으로 메모리를 사용할수 있다.
스택 세그먼트는 함수나 프로시듀어에서 선언한 변수들-로컬변수-들을 저장하는 공간으로 함수가 시작되면 변수들이 스택 구조형태로 차곡 차곡 메모리에 할당되어 사용되다가 함수가 종료되면 메모리 할당이 자동으로 해제되는 변수을 저장하는 공간 입니다. 스택 형태의 자료구조로 메모리를 할당하면 위 메카니즘을 손쉽게 구현 할수 있어서 스택형태로 자료구조를 만들었기 때문에 스택 세그먼트라 부릅니다.
Heap은 메모리 자유영역입니다. 코드영역 할당하고 다른 세그먼트들을 할당하고 남은 나머지 부분이지요. 이 영역은 calloc, malloc, new 와 같은 명령으로 실행중 동적으로 메모리를 불러다 쓸 수있는 공간이 됩니다.
stack과 heap은 둘다 free space(unused space)에 위치합니다. stack은 free space의 high address에서 시작하고 heap은 그 나머지 공간이라 보시면 됩니다. 함수가 호출되면 함수의 로컬변수들이 스택에 추가되고 함수가 종료되면 스택에서 pop되여 free영역으로 환원되겠죠. malloc 같은 동적 할당 명령은 heap의 Low address 쪽에서 부터 할당시키고 free 혹은 delete 명령은 할당됐던 공간을 free 영역으로 환원시킵니다. 실제로 이 같은 메모리 구조는 실행중인 프로그램의 관점에서 봐야하기 때문에 프로세스의 메모리 맵(구조)라 이야기 해야 옳습니다. 메모리 구조를 정확히 이해하면 데이타들의 life time이 어떻게 구현됬는지를 알수 있습니다.
'컴퓨터' 카테고리의 다른 글
[Network] Parity Bit, Checksum, CRC (0) | 2013.01.09 |
---|---|
[Network] WireShark 를 이용한 Packet Loss 측정 (1) | 2012.12.27 |
[문서작업] MS Office 단축키 (0) | 2012.11.21 |
[C언어] 반올림 함수 (1) | 2012.11.20 |
변수표기법 (0) | 2012.11.16 |