我想将我的缓存库移动到DLL,并允许多个应用程序使用GlobalAlloc()共享DLL中分配的单个指针。我怎么能做到这一点,并且会导致显着的性能下降?
答案 0 :(得分:2)
你当然可以做到这一点,对单个指针没有任何性能影响。
您应该选择不同的共享堆,而不是使用遗留API GlobalAlloc
。例如,最简单的用途是COM分配器CoTaskMemAlloc
。或者您可以使用HeapAlloc
传递GetProcessHeap
获得的进程堆。
例如,忽略显示错误检查:
void *mem = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, size);
请注意,如果您希望在与创建内存的模块不同的模块中释放内存,则只需要担心堆共享。如果您的DLL既创建并销毁内存,那么您可以使用普通的malloc
。由于所有模块都位于相同的进程地址空间中,因此该进程中的任何模块分配的内存都可以被任何其他模块使用。
<强>更新强>
我在第一次阅读这个问题时失败了,因为你可能想要多个进程可以访问相同的内存。如果这就是您所需要的,那么它只能用于内存映射文件,或者可能使用某种形式的IPC。