데이터 영역은 전역 변수와 static 변수가 할당되는 영역이다. 이 영역에 할당되는 변수들은 일반적으로 프로그램의 시작과 동시에 할당되고, 프로그램이 종료되어야만 메모리에서 소멸된다.
즉, 데이터 영역에 할당된 변수는 프로그램이 종료될 때까지 계속 존재한다는 특징을 지닌다. 전역 변수와 static 변수의 특징과 일치하는 부분이다.
Initalized data segment : data segment 라 불리는 영역이며, 초기화된 외부 변수 static 변수등이 저장되는 영역이다. 보통 Text segment + initialized data 영역을 합쳐서 프로그램한다.
예) static int a = 1;
Uninitalized data segment : bss segment 라고 불리며, 이 영역을 프로그램이 실행될때 0 이나 NULL Pointer로 초기화 된다.
예) static int a; (외부 변수나, static 변수중 초기화 되지 않은 변수들)
스택 영역(Stack Area)
스택 영역은 함수 호출 시 생성되는 지역 변수와 매개 변수가 저장되는 영역이다. 함수가 실행되는 동안에만 존재하며 함수의 실행이 종료되면 사라진다.이는 다른 메모리 영역과 확실히 비교되는 특징이다. 늦게 할당된 변수의 메모리가 먼저 해제되므로 스택의 특징과 일치한다. 함수내의 자동 변수 외에 saved frame pointer 등 함수를 호출한 caller 의 환경 정보도 저장한다.
힙 영역(Heap Area)
힙 영역은 프로그래머가 관리하는 메모리 영역이다. 즉 프로그래머의 필요에 의해서 메모리 공간이 할당 및 소멸되는 영역이다. 동적 할당으로 생성되는 메모리 영역이다. 힙 영역은 uninitialized data 영역의 bottom 과 staack 영역의 top 부분에 위치한다.
※ 정적 할당되는 변수의 메모리는 변수의 특성에 따라 데이터 또는 스택 영역에 생성된다. 정적 할당은 컴파일 단계(Compile-time)에서 모두 이루어진다. 하지만 컴파일 단계에서는 메모리의 크기만 생성 할 뿐 변수의 값은 저장 되지 않는다. 이 때문에 배열의 크기는 상수로만 지정해야 하는 것이다. 변수 값의 저장은 런타임(Run-time)에서 이루어지며, 런타임 단계에서 메모리를 생성하고자 할때 사용하는 것이 동적 할당이다.
'공부 > 0x09 STUDY' 카테고리의 다른 글
| Base64 Encode 원리 (0) | 2012/02/20 |
|---|---|
| 자바스크립트 encodeURI / encodeURIComponent / escape 비교 (0) | 2012/02/20 |
| 흠 (0) | 2012/02/15 |
| URL encode / URL decode (0) | 2012/02/15 |
| 메모리 구조 (0) | 2012/01/18 |