将GlobalAlloc()内存从DLL共享到多个Win32应用程序

时间:2012-01-25 08:40:01

标签: winapi memory dll

我想将我的缓存库移动到DLL,并允许多个应用程序使用GlobalAlloc()共享DLL中分配的单个指针。我怎么能做到这一点,并且会导致显着的性能下降?

1 个答案:

答案 0 :(得分:2)

你当然可以做到这一点,对单个指针没有任何性能影响。

您应该选择不同的共享堆,而不是使用遗留API GlobalAlloc。例如,最简单的用途是COM分配器CoTaskMemAlloc。或者您可以使用HeapAlloc传递GetProcessHeap获得的进程堆。

例如,忽略显示错误检查:

void *mem = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, size);

请注意,如果您希望在与创建内存的模块不同的模块中释放内存,则只需要担心堆共享。如果您的DLL既创建并销毁内存,那么您可以使用普通的malloc。由于所有模块都位于相同的进程地址空间中,因此该进程中的任何模块分配的内存都可以被任何其他模块使用。

<强>更新

我在第一次阅读这个问题时失败了,因为你可能想要多个进程可以访问相同的内存。如果这就是您所需要的,那么它只能用于内存映射文件,或者可能使用某种形式的IPC。