메모리 할당 방법 비교

다음은 다양한 메모리 할당 방법을 간략하게 비교한 것입니다.

GlobalAlloc, LocalAllocHeapAlloc 함수는 궁극적으로 동일한 힙에서 메모리를 할당하지만 각각은 약간 다른 기능 집합을 제공합니다. 예를 들어, 메모리를 할당할 수 없는 경우 LocalAlloc 에서 사용할 수 없는 기능인 예외를 발생하도록 HeapAlloc을 지시할 수 있습니다. LocalAllocHeapAlloc에서 사용할 수 없는 기능인 핸들 값을 변경하지 않고 다시 할당하여 기본 메모리를 이동할 수 있도록 하는 핸들 할당을 지원합니다.

32비트 Windows 시작하여 GlobalAllocLocalAlloc는 프로세스의 기본 힙에 대한 핸들을 사용하여 HeapAlloc를 호출하는 래퍼 함수로 구현됩니다. 따라서 GlobalAllocLocalAllocHeapAlloc보다 오버헤드가 더 큽습니다.

다른 힙 할당자는 다른 메커니즘을 사용하여 고유한 기능을 제공하므로 올바른 함수로 메모리를 해제해야 합니다. 예를 들어 HeapAlloc로 할당된 메모리는 LocalFree 또는 GlobalFree가 아닌 HeapFree해제해야 합니다. GlobalAlloc 또는 LocalAlloc로 할당된 메모리는 해당 전역 또는 로컬 함수를 사용하여 쿼리, 유효성 검사 및 해제해야 합니다.

VirtualAlloc 함수를 사용하면 메모리 할당에 대한 추가 옵션을 지정할 수 있습니다. 그러나 할당은 페이지 세분성을 사용하므로 VirtualAlloc 를 사용하면 메모리 사용량이 높아질 수 있습니다.

malloc 함수는 런타임에 종속되는 단점이 있습니다. 연산자는 컴파일러 종속 및 언어 종속이라는 단점이 있습니다.

CoTaskMemAlloc 함수는 C, C++또는 Visual Basic 잘 작동할 수 있다는 장점이 있습니다. MIDL은 CoTaskMemAllocCoTaskMemFree 를 사용하여 메모리를 마샬링하므로 COM 기반 애플리케이션에서 메모리를 공유하는 유일한 방법이기도 합니다.

예제

전역 및 로컬 함수

힙 함수

가상 메모리 함수