2012-01-25 144 views
1

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

+2

您是否希望在使用DLL的所有独立进程之间直接共享内存?堆API不会那样做,因为它们分配每个进程的内存。要在进程之间共享内存,您需要使用[使用文件映射API的共享内存](http://msdn.microsoft.com/en-us/library/windows/desktop/aa366551(v = vs.85) .aspx)(不需要实际的文件)。请注意,虽然每个进程都会得到相同的内存,但内存可能会以不同的地址结束,因此您将拥有不同的指针值。 – BrendanMcK

回答

2

你当然可以这样做,不会有单个指针任何性能含义。

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

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

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

请注意,您只需要,如果你希望在内存中,从它被创造,其中不同的模块被释放担心堆共享。如果你的DLL既创建并破坏了内存,那么你可以使用普通的旧版本malloc。由于所有模块都位于同一个进程地址空间中,因此该进程中的任何模块分配的内存都可供任何其他模块使用。

更新

我没有对这个问题的一读挑上你可能会想多进程访问相同的内存的可能性。如果这就是你所需要的,那么它只能用内存映射文件,或者用某种形式的IPC。

相关问题