C프로그래머들은 대개 추가적인 가상메모리를 런타임에 획득할 필요가 있을 때, 동적 메모리 할당기를 사용하는 것을 좀 더 편리하고 호환성이 좋다고 생각한다.
동적 메모리 할당기는 힙 (heap)이라고 하는 프로세스의 가상 메모리 영역을 관리한다.
커널은 힙의 꼭대기를 가리키는 변수 brk(break라고 읽는다)를 사용한다.
할당기는 힙을 다양한 크기의 블록들의 집합으로 관리한다. 각 블록은 할당되었거나 가용한 가상메모리의 연속적인 묶음이다.
할당된 블록은 응용에 의해 명시적으로 또는 메모리 할당기 자신에 의해 묵시적으로 반환될 때까지 할당된 채로 남아 있다.
명시적 할당기 : 응용이 명시적으로 할당된 블록을 반환해 줄 것을 요구한다.
ex) C - malloc, malloc 함수를 호출해서 블록을 할당하며, free 함수를 호출해서 블록을 반환한다. C++에서 new, delete 호출과 유사하다.
묵시적 할당기 : 언제 할당된 블록이 더 이상 프로그램에 의해 사용되지 않고 블록을 반환하는지를 할당기가 검출할 수 있을 것을 요구한다. 또한 garbage collector 라고 알려져 있다, 자동으로 사용하지 않은 할당된 블록을 반환시켜주는 작업을 garbage collection이라고 부른다. ex) List, ML, Java같은 상위수준 언어들에서 사용한다.
malloc 함수를 호출해서 힙으로부터 블록들을 할당받는다.