동적 메모리 할당기
동적 메모리 할당기
저수준의 mmap과 munmap 함수들을 사용하여 가상메모리의 영역을 생성하고 삭제할 수 있지만,
대개 추가적인 가상메모리를 런타임에 획득할 필요가 있을 때 동적 메모리 할당기라는 것을 사용하는 것이 편리하고 호환성이 좋다고 여겨진다.
동적 메모리 할당기는 heap, 즉 프로세스의 가상 메모리 영역을 관리한다.
할당기는 힙을 다양한 크기의 블록들의 집합으로 관리하며, 이 때 각 블록은 할당되었거나 가용한 가상메모리의 연속적인 묶음이다.
할당기에는 두 개의 기본 유형이 있다:
- 명시적 할당기
- 묵시적 할당기
두 유형 모두 할당시에는 명시적으로 블록을 할당하도록 요구하지만, 할당된 블록을 반환하는 방식에 차이가 있다.
명시적 할당기
명시적 할당기는 할당된 블록의 반환하기 위해 애플리케이션이 명시적으로 요구해야 한다.
예시로는 C 표준 라이브러리의 malloc()
함수가 있다.
C 프로그램은 malloc 함수를 호출해서 블록을 할당하며, 할당된 블록을 반환하기 위해서는 free()
함수를 호출해야 한다.
C++ 에서는 new()
와 delete()
가 있다.
묵시적 할당기
묵시적 할당기는 할당된 블록이 더 이상 프로그램에 의해 사용되지 않는지 할당기가 검출할 수 있을 것을 요구하며,
이러한 검출을 통해 블록의 반환이 별도의 함수 호출 없이 이루어진다.
묵시적 할당기는 garbage collector라고도 알려져 있으며, 자동으로 사용하지 않는 할당된 블록을 반환하는 작업을 가비지 컬렉션이라고 부른다.
List, ML, Java같은 고급 언어는 할당된 블록들을 반환시키기 위해 가비지 컬렉션을 사용한다.