삽질의 현장/- C

곱씹어보자 C!_#017_삽잡이의 두서없이 막하는 Heap (엉덩이 아님)

shovelman 2015. 6. 27. 00:26

죄송합니다... heap 보고 엉덩이라니...

죄송합니다.... 아하하....


아무튼...


C언어에서 바라보는 프로그램은 명령어와 데이터로 나뉩니다.

그런데 데이터는 우리 사용자에 의해서 저장이 되죠....


데이터는 크게 세가지의 부분으로 나뉩니다.

첫번째, Global Data, 

두번째, Stack,

세번쨰, Heap 입니다.


왜 나뉘느냐... 

바로, 용도에 맞게 적정한 위치에 데이터를 보관하고자 하는 이유에서 입니다.

그 중에서, 우리가 알아보고자 하는 영역은 바로 Heap 영역입니다.


그전에 Stack에서 대해서 잠깐 간단하게 설명하자면,

Stack은 함수의 중괄호 블럭 시작과 함께 생성되고 

종료될 때 소멸되는 공간을 말합니다.


아무튼... 우린 Heap 을 봐야됩니다...

Global Data 영역에는 정적 변수, 전역변수, 상수 등이 있고

Stack 영역에는 Auto 변수가 있는데요


Heap에는 딱히 변수가 있지 않습니다. 하지만 그들이 있죠...

바로... malloc과 free라는 동적 메모리 할당과 해방의 친구들이 있습니다.


다른 영역에는 변수가 있지만, Heap은 메모리를 할당해준답니다.

malloc 의 역할은 바로 바이트 단위의 메모리를 

heap에게 할당해주는 역할을 담당하고 있죠...


malloc은 주소를 할당해 오는 역할을 하는 것입니다. 그리고 그 할당해온 주소를 

malloc을 부른 포인터 변수에게 담는 것이죠.


여기서 중요한 것은 항상 포인터와 사용한다는 것입니다.

왜냐하면 주소를 할당해온 역할을 한다 했습니다. 

따라서 가져온 주소를 받을 수 있는 변수는 무엇인가요?

바로 포인터 변수이죠... 그 이유입니다.


malloc를 사용하는 것은 나중에 보여드리도록 하겠습니다.