본문 바로가기
코드/c/c++

메모리 할당 함수

by WeZZ 2008. 9. 19.


malloc( size_t size );

size 크기의 메모리를 할당하고 할당된 메모리의 위치를 리턴해 줍니다. 할당된 영역에 담겨있는  값은 정의되지 않습니다. C표준 함수입니다.

http://www.opengroup.org/onlinepubs/009695399/functions/malloc.html

 

calloc( size_t n, size_t size );

size 크기를 가지는 요소 n개를 위한 메모리를 할당하고 각 요소의 모든 비트를 0으로 초기화하여  리턴합니다. 즉, 할당되는 영역은 malloc( n*size )와 같이 호출한 것과 동일하며, 그 내용을 0으로 초기화한다는 것만이 다릅니다. C표준 함수입니다.

http://www.opengroup.org/onlinepubs/009695399/functions/calloc.html

 

valloc( size_t size );

size보다 큰 최소크기의 어떤 페이지사이즈 p의 배수만큼의 메모리를 할당합니다. p는 sysconf(_SC_PAGESIZE) 호출로 구할 수 있습니다. p가 4k라면, 1k의 할당을 요청하면 4k를 할당해 주고, 5k를 요청하면 8k를 할당해 줍니다. 그 외의 동작은 malloc과 유사합니다. valloc은 유닉스/리눅스 계열의 시스템 콜로, 더이상 사용되지 않는 함수입니다.

http://www.opengroup.org/onlinepubs/007908799/xsh/valloc.html

 

HeapAlloc( HANDLE heap, DWORD flag, SIZE_T bytes )

heap으로 지정된 힙으로부터 flag의 속성을 가지도록 bytes크기의 메모리를 할당합니다. 힙은 CreateHeap함수로 생성할 수 있습니다. 이때, 할당된 메모리는 고정된 주소를 가지게 됩니다. 즉, 가상 메모리 관리 작업에 의해 영향을 받지 않습니다. 이 함수는 Win32 API함수로, 윈도우용 프로그램에서만 사용할 수 있습니다.

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/memory/base/heapalloc.asp

 

 

각 할당 함수의 최대 크기는 OS에 의존적이며, 현재 쓰이고 있는 32비트 OS (유닉스, 리눅스, 윈도우2000/XP 등)에서는 모두 최대 약 4기가까지 할당 가능합니다. 물론, 64비트 OS에서는 (64비트리눅스, 64비트윈도우XP등) 4기가의 40억배까지 할당 가능합니다.

일반적인 작업이라면 malloc을 쓰시는 게 좋으며, 0으로 초기화될 필요가 있다면 calloc을, 사용하고 있는 OS에 의존적인 작업일때는 valloc이나 HeapAlloc 등의 OS별 시스템콜을 사용하시면 되겠습니다.