2010. 9. 27. 21:03



[스택(Stack), 힙(Heap) 그리고 데이터(Data)영역 ]
프로그램을 실행시키기 위해서는 메모리 공가ㅏㄴ이 필요하다. 지역 변수나 전역 변수를 선언하기 위해서도 메모리 공간이 필요하지 않은가? 그래서 컴퓨터는 여러분이 실행시킨 프로그램의 실행을 위해서 메모리 공간을 할당해 준다. 이렇게 해서 할당되는 메모리 공간은 크게 스택, 힙 그리고 데이터 영역으로 나뉘어 진다.
->쉬운 이해를 위해서 컴퓨터가 메모리 공간을 할당해 준다고 표현하였지만, 운영체제가 메모리 공간을 할당해 준다고 표현해야 정확한 표현이 된다.


할당 시기 : 프로그램이 실행될 때마다
할당 장소 : 메인 메모리에 할당되는데, 여기서 말하는 메인 메모리라 함은 RAM을 의미 함
할당 용도 : 프로그램 실행 시 필요한 메모리 공간(ex: 지역 변수, 전역 변수 선언을 위해)의 할당을 위해서

 전역변수
 Static 변수
  데이터 영역
 프로그래머 할당  힙(Heap)영역 
 지역변수
 매게변수
 스택(Stack)영역 

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


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

예를 들어 다음과 같은 stack이라는 함수가 있다고 가정해 보자

인자가 전달되면서 stack이라는 함수가 호출되면, 일단 매게 변수 a가 스택 영역에 올라가게 된다. 그리고 나서 지역 변수 b가 스택 영역에 올라갈 것이다. 반대로 stack 함수의 호출이 완료되고 나면, 변수 a와 변수 b는 스택영역에서 사라져 버린다.



* 힙 영역(Heap Area)
힙은 프로그래머가 관리하는 메모리 영역이다. 즉 프로그래머의 필요에 의해서 메모리 공간이 할당 및 소멸되는 영역이다.



◎배열은 반드시 상수로 선언해야 하는 이유
-배열 선언 시 배열의 길이는 반드시 상수로 표현해야 한다. 그 이유를 찾는 과정에서 힙 영역의 필요성-특징을 이해하게 될 것이다.
∴"스택과 데이터 영역에 할당될 메모리의 크기는 컴파일되는 동안(compile-time)에 결정되어야 하기 때문"
-힙은 데이터 영역이나 스택과 달리 런-타임에 필요한 만큼 메모리를 할당하고 해제할 수 있다.
"할당해야 할 메모리의 크기를 런-타임(프로그램이 실행되는 동안)에 결정해야 하는 경우, 유용하게 사용되는 메모리 공간이 바로 힙(Heap)영역이다."





출처 ;C프로그래밍 _ 윤성우
Posted by Triany