본문 바로가기
[ ★ ]Study/Programming

Heap 이란?

by nroses-taek 2017. 9. 16.
Heap 런타임시 크기가 결정되는 요소들이 저장되는 공간이다.
C malloc()이나 C++ new 메모리 할당이 때에는 Heap영역에 메모리가 위치하게 된다.
 
프로그램의 실행 도중에 요구되는 기억 장소를 할당하기 위하여 운영 체제가 예약되어 있는 기억 장소 영역, 프로그램에서 실행 도중에 자료를 저장하기 위하여 기억장소를 요청하게 되면 운영 체제에서는 Heap 존재하는 기억장소를 프로그램에 할당한다.
 
Heap 프로그램이 실행될 때까지 없는 크기의 양만큼의 데이터를 저장하기 위해 프로그램의 프로세스가 사용할 있는 미리 예약되어 있는 메모리 영역이다. 운영체제로부터 이미 확보된 일정량의 저장공간을 가지고 있으면 저장과 관련된 처리를 쉽게 있다. 일반적으로 필요할 때마다 운영체제의 저장공간을 요청하는 것보다 효율적이다.
 
컴퓨터의 기억 장소에서 일부분이 프로그램들에 할당되었다가 회수되는 작업이 되풀이 되는 영역이라고도 있다. malloc() free() 사용을 뜻한다. 여기서 스택과 차이점이 있는데, 스택은 LIFO방식으로 운영이 되지만 힙은 그런 규칙이 없습니다.
 
장점: 상황에 따라 원하는 크기만큼의 메모리가 할당되므로 경제적이며, 이미 할당된 메모리라도 언제든지 크기를 조절할 수 있다.
 
단점: 더 이상 사용하지 않을 때 명시적으로 메모리를 해제해 주어야 한다.
 

함수
기능
void * malloc ( size_t size );
size 바이트의 메모리를 힙에서 할당하여 반환한다.
void * calloc ( size_t num, size_t size );
(num * size) 바이트의 메모리를 힙에서 할당하고 포인터값을 반환한다.
void * realloc ( void * ptr, size_t size );
ptr이 가리키는 메모리를 size 바이트만큼 힙에서 재할당하여 반환한다.
void free ( void * ptr );
ptr이 가리키는 메모리를 해제한다.
해제 전까지 계속 존재하므로 필요없으면 이 함수에 의해 해제해야 한다.

댓글