메모리 할당 방법 비교
다음은 다양한 메모리 할당 방법을 간략하게 비교한 것입니다.
- CoTaskMemAlloc
- GlobalAlloc
- HeapAlloc
- LocalAlloc
- malloc
- new
- VirtualAlloc
GlobalAlloc, LocalAlloc 및 HeapAlloc 함수는 궁극적으로 동일한 힙에서 메모리를 할당하지만 각각은 약간 다른 기능 집합을 제공합니다. 예를 들어 , LocalAlloc 에서 사용할 수 없는 기능인 메모리를 할당할 수 없는 경우 HeapAlloc에 예외를 발생하도록 지시할 수 있습니다. LocalAlloc 은 HeapAlloc에서 사용할 수 없는 기능인 핸들 값을 변경하지 않고 기본 메모리를 재할당하여 이동할 수 있도록 하는 핸들 할당을 지원합니다.
32비트 Windows부터 GlobalAlloc 및 LocalAlloc 은 프로세스의 기본 힙에 대한 핸들을 사용하여 HeapAlloc 를 호출하는 래퍼 함수로 구현됩니다. 따라서 GlobalAlloc 및 LocalAlloc 은 HeapAlloc보다 오버헤드가 더 큽 있습니다.
다른 힙 할당자는 서로 다른 메커니즘을 사용하여 고유한 기능을 제공하므로 올바른 함수로 메모리를 해제해야 합니다. 예를 들어 HeapAlloc로 할당된 메모리는 LocalFree 또는 GlobalFree가 아닌 HeapFree로 해제해야 합니다. GlobalAlloc 또는 LocalAlloc로 할당된 메모리는 해당 전역 또는 로컬 함수를 사용하여 쿼리, 유효성 검사 및 해제해야 합니다.
VirtualAlloc 함수를 사용하면 메모리 할당에 대한 추가 옵션을 지정할 수 있습니다. 그러나 할당은 페이지 세분성을 사용하므로 VirtualAlloc 을 사용하면 메모리 사용량이 높아질 수 있습니다.
malloc 함수는 런타임 종속이라는 단점이 있습니다. 새 연산자는 컴파일러 종속 및 언어 종속이라는 단점이 있습니다.
CoTaskMemAlloc 함수는 C, C++또는 Visual Basic에서 잘 작동할 수 있다는 이점이 있습니다. MIDL은 CoTaskMemAlloc 및 CoTaskMemFree 를 사용하여 메모리를 마샬링하므로 COM 기반 애플리케이션에서 메모리를 공유하는 유일한 방법이기도 합니다.
예제
관련 항목