Low level의 mmap과 munmap함수를 사용하는 것이 가상 메모리를 생성하고 삭제하는 데에 사용할 수 있기는 하지만, C 프로그래머는 통상 dynamic memory allocator를 사용하는 것이 추가의 가상 메모리를 런타임 시에 획득하기 위해서는 편리하고 간편한 방법임을 깨닫게 된다.
Dynamic memory allocator는 프로세스의 가상 메모리를 heap이라고 불리는 구간에 저장한다. 세부 내용은 시스템에 따라 다르기는 하지만, 일반적으로 우리는 힙이 초기화되지 않은 데이터 공간에 곧바로 사용할 수 있으며 위 방향으로 자랄 수 있는 demand-zero memory라고 여길 것이다.
각 프로세스마다 커널은 heap의 꼭대기에 brk라는 변수(포인터)를 가지고 있다.
Allocator는 힙을 다양한 크기의 메모리 block들의 집합으로 관리한다. Free(가용)/allocated(할당된) 상태의 메모리 블록들로 이루어져 있으며, free block들은 allocator가 할당, allocated block들은 해제할 때 까지 이러한 상태를 유지하게 된다.
allocator는 (프로그래머의 입장에서) 명시적explicit으로 할당하거나 묵시적implicit으로 할당할 수 있다. 어떤 객체가 블록을 반환하고 할당하는지에서 차이가 발생한다.