프로그램을 실행시키기 위해서는 메모리 공간이 필요함. 지역 변수나 전역 변수를 선언하기 위해서도 메모리 공간이 필요하듯이. 컴퓨터는 우리가 실행시킨 프로그램의 실행을 위해서 메모리 공간을 할당해 준다.(사실은 운영체제가 메모리 공간을 할당해 준다고 표현해야 정확한 표현이 된다.) 이렇게 해서 할당되는 메모리 공간은 크게 Stack, Heap, Data 영역으로 나뉘어진다.

이 세 개의 메모리 영역은 프로그래머가 반드시 이해하고 있어야 하는 최소한의 메모리 공간이다. 그렇다면 이러한 메모리 공간은 어떠한 용도로 언제, 어디서 할당되는지 이해해 볼 것.




데이터 영역 (Data Area)

데이터 영역은 전역 변수와 static 변수가 할당되는 영역이다. 이 영역에 할당되는 변수들은 일반적으로 프로그램의 시작과 동시에 할당되고, 프로그램이 종료되어야만 메모리에서 소멸된다. 즉, 데이터 영역에 할당된 변수는 프로그램이 종료될 때까지 계속 존재한다는 특징을 지닌다. 전역 변수와 static 변수는 프로그램이 종료될 때까지 존재하는 변수들이다. 이러한 특징이 데이터 영역의 특징과 일치한다.


스택 영역(Stack Area)

스택 영역은 함수 호출 시 생성되는 지역 변수와 매개 변수가 저장되는 영역이다. 이 영역에 할당 된 변수는 함수 호출이 완료되면 사라진다는 특징을 지닌다. 이는 다른 메모리 영역과 확실히 비교되는 특징이다.


힙 영역(Heap Area)

힙은 프로그래머가 관리하는 메모리 영역이다. 즉 프로그래머의 필요에 의해서 메모리 공간이 할당 및 소멸되는 영역이다.프로그램을 실행 시 사용자의 요구에 맞게 메모리(배열의 길이)를 할당해 주는 영역. 즉, 런-타임에 메모리의 크기를 결정하고 싶은 것이다. 이러한 용도로 사용하기 위해서 존재하는 메모리 공간이 바로 힙(Heap)이다.


* 배열은 반드시 상수로 선언해야 하는 이유 : 스택과 데이터 영역에 할당될 메모리의 크기는 컴파일되는 동안 결정되어야 한다. 컴파일하고 나면 function 함수 내에서 필요로 하는 스택 공간의 크기를 알 수 있다. 컴파일 되는 동안에 메모리의 크기가 결정된다는 것은 바로 이것을 의미하는 것. "데이터 영억과 스택에 할당될 메모리의 크기는 컴파일-타임에 결정되어야 한다."

* "int i = 10;" 변수 i가 10으로 초기화된다는 것이 결저되는 순간은 컴파일되는 동안이 아닌 실행되는 동안에 결정된다. 즉 function 함수가 호출되어서 int i = 10; 을 실행하여야 결정이 된다. 이를 두고 "런-타임에 결정된다."라고 표현한다. 


'Language > C언어' 카테고리의 다른 글

재귀함수  (0) 2015.11.02
선언(declaration)과 정의(definition)의 차이  (0) 2013.11.08
C언어 따옴표의 의미  (0) 2013.11.06
반복문 for 의 함정  (1) 2013.10.23
강제 형 변환  (0) 2013.10.23
Posted by 나무길 :