Tour de 뚜르

관리자 | 글쓰기

Tour de 뚜르 » Search » Results » Articles

stack와 관련된 글 1개

  1. 2010/01/05 메모리 영역 (stack & heap)

Tour de 뚜르 » Study

메모리 영역 (stack & heap)

뚜르 | 2010/01/05 14:52

프로그램이 실행 될 때 메모리는 기계어 코드가 들어 있는 코드 섹션(Code Section)과 데이터를 저장하는 데이터 섹션(Data Section)으로 나뉜다.


데이터 섹션은 다시 3부분으로 나눠어 지며 전역 메모리(Global Memory)스택 메모리(Stack Memory), 그리고 힙 메모리(Heap Memory)가 바로 그것이다.


전역 메모리에는 모든 지역 함수(Local Function) 바깥에 선언된 변수(Global Variable)를 할당한다. 이 때 메인 함수는 운영체제가 프로그램 실행을 위해 최초로 호출하는 일종의 지역 함수로 구분된다.

스택 메모리는 함수 내에 선언된 지역 변수들을 위한 공간이다. 지역 변수는 필요한 공간의 크기를 컴파일 시에 확정한다. 함수 호출시 그에 해당하는 지역 변수를 위한 공간을 확보하며 해당 함수의 실행이 끝나게 되면 지역 변수의 공간을 자동으로 해제하게 된다.

힙 메모리의 경우 프로그램 실행시 일정량의 힙 메모리를 할당하게 되며 프로그램 실행 중 필요에 의한 동적 메모리 할당을 위한 공간이 힙 메모리이다. (C에서는 malloc,C++ 에서는 New 명령을 사용하여 메모리를 할당하게 된다.) 힙 메모리의 크기는 운영체제가 정한 최대 가상 메모리(Virtual Memory) 만큼이다.

프로그램의 메인 메모리 구조를 단순화 시켜 나타내면 다음과 같다.

높은 번지↓(High Address)
힙(Heap)
 
미사용 공간(Available)
스택(Stack)
전역 변수(Global Variables)
낮은 번지↑(Low Address)
기계어 코드(Machine Code)

미사용 공간(Available)은 스택의 정적으로 할당, 힙의 동적 할당에 따라 줄어 든다. 이 말의 의미는 처음부터 모든 스택과 힙 공간이 할당되어 있는 것이 아니라 동적이든 정적이든 함수의 호출로 인하여 메모리 공간이 필요한 시기에 할당된다는 의미이다.
 
 
------------------------------------------------------------------------------------------

1. Text (텍스트 영역)

program code (CPU에 의해서 수행되는 기계어 명령어들이 모여있는 곳)

2. Data (데이터 영역)

전역 변수와 정적(static) 변수가 할당된 곳. 프로그램 시작과 동시에 할당되고, 프로그램이 종료되어야만 메모리에서 소멸된다.

(1) initialized data segment (초기화된 데이터 영역) : initialized variables (초기화된 데이터 들이 모여있는 곳)

(2) uninitialized data segment (비 초기화된 데이터 영역) : uninitialized variables ( 초기화되지 않은 변수들이 모여있는 곳 )

     - bss (block started by symbol) 라고도 한다

3. Stack (스택 영역)

automatically allocated variables (local variables) and other stack frame entries

지역변수와 매개 변수가 저장된 곳. 이 영역에 할당된 변수는 함수 호출이 완료되면 사라진다는 특징을 지닌다.

- 컴파일 타임 크기 결정


4. Heap (힙)

dynamically allocated variables

동적 메모리 할당을 위한 곳. 프로그래머가 할당 및 해제를 해 줘야 한다.

- 런 타임 크기 결정

2010/01/05 14:52 2010/01/05 14:52


태그 , , ,

(go to top)