【发布时间】:2012-02-16 17:58:23
【问题描述】:
在COM服务器执行过程中分配一块内存,然后通过一个输出参数将该内存块传递给客户端是很常见的。然后,客户端有义务使用 CoTaskMemFree() 等方法释放该内存。
问题是,这块内存分配在哪里?假设 COM 服务器和 COM 客户端在不同的进程中,为了让客户端访问该内存块,它 应该 被分配在客户端的进程地址空间中。但这是真的吗?我听说 COM 有一个“Task Memory Allocator”。但我对此知之甚少。
只是一些疯狂的猜测:
首先是COM服务器根据COM客户端的请求分配内存,使用CoTaskMemAlloc()。
然后,COM 客户端获取那块内存,使用它,并使用 CoTaskMemFree() 释放它。
因此“任务内存分配器”必须同时跟踪客户端和服务器进程。否则,它将不知道谁(服务器)执行了内存分配操作以及应该给谁(客户端)该内存。然后,分配的内存会以某种方式注入到客户端的进程地址空间。
有人能解释一下这个话题吗?
【问题讨论】:
标签: com