COM의 메모리 할당
경우에 따라 메서드는 힙에 메모리 버퍼를 할당하고 버퍼의 주소를 호출자에게 반환합니다. COM은 힙에서 메모리를 할당하고 해제하기 위한 함수 쌍을 정의합니다.
- CoTaskMemAlloc 함수는 메모리 블록을 할당합니다.
- CoTaskMemFree 함수는 CoTaskMemAlloc로 할당된 메모리 블록을 해제합니다.
열기 대화 상자 예제에서 이 패턴의 예를 설명했습니다.
PWSTR pszFilePath;
hr = pItem->GetDisplayName(SIGDN_FILESYSPATH, &pszFilePath);
if (SUCCEEDED(hr))
{
// ...
CoTaskMemFree(pszFilePath);
}
GetDisplayName 메서드는 문자열에 대한 메모리를 할당합니다. 내부적으로 메서드는 CoTaskMemAlloc를 호출하여 문자열을 할당합니다. 메서드가 반환되면 pszFilePath는 새 버퍼의 메모리 위치를 가리킵니다. 호출자는 CoTaskMemFree를 호출하여 메모리를 해제합니다.
COM이 자체 메모리 할당 함수를 정의하는 이유는 무엇인가요? 한 가지 이유는 힙 할당자에 추상화 계층을 제공하기 위해서입니다. 그렇지 않으면 일부 메서드는 malloc를 호출하고 다른 메서드는 new를 호출할 수 있습니다. 이런 경우에는, 프로그램이 어떤 경우에는 free를 호출하고 다른 경우에는 delete를 호출하여, 모든 것에 대한 추적이 급속히 불가능해집니다. COM 할당 함수는 균일한 접근을 만듭니다.
또 다른 고려 사항은 COM이 이진 표준이므로 특정 프로그래밍 언어에 연결되지 않는다는 점입니다. 따라서 COM은 언어별 메모리 할당 형식을 사용할 수 없습니다.
다음