COM 组件的内存分配

内存分配

有时候需要通过一些方法在堆上分配内存缓冲区,并将缓冲区的地址返回给调用者。为此 COM 定义了一组用来在堆上申请释放内存的函数。

  • CoTaskMemAlloc 用来分配一块内存。

  • CoTaskMemFree 函数用来释放一块使用 CoTaskMemAlloc 分配的内存。

案例如下:

PWSTR pszFilePath;
hr = pItem->GetDisplayName(SIGDN_FILESYSPATH, &pszFilePath);
if (SUCCEEDED(hr))
{
    // ...
    CoTaskMemFree(pszFilePath);
}

GetDisplayName 方法用来获取显示名称,函数内部会调用 CoTaskMemAlloc 分配一块内存用来存储,当函数返回的时候,pszFilePath 参数已经指向了一块新的内存区域,所以调用者在函数成功后需要手动调用 CoTaskMemFree 释放函数内部分配的内存。

COM 组件 为什么定义自己的内存分配函数?一个原因是 COM 组件需要提供一个堆分配的抽象层,因为如果不这样做,一些代码中可能会使用 malloc 分配内存,而另一些可能会使用 new 分配内存。相应的,释放内存仍然会有 free 和 delete 两种版本,跟踪这些分配方法显然是不太容易,所以 COM 为了内存分配具有一致性,所以增加了一对内存分配的函数。

另一个重要原因在于 COM 组件是一种二进制标准,它不依赖于任何特定的编程语言,因此内存分配的操作不能和特定的语言绑定。

大佬,给点反馈?

平均评分 / 5. 投票数:

很抱歉,这篇文章不能帮助到你

请让我们改进这篇文章

告诉我们我们如何改善这篇文章?

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注