【发布时间】:2012-09-27 12:51:32
【问题描述】:
是否可以创建一个在进程之间共享的内存池(例如在 Win32 中从 CreateFileMapping 和 INVALID_HANDLE_VALUE)然后将该块内存用作堆?
我希望 new/delete 运算符(或 malloc/free)从该块分配/释放内存(并对其进行通常的堆管理)。
谢谢。
编辑:我真正的问题很简单:目前我使用new 运算符正常分配各种大系列的结构,但我希望这些结构在进程关闭后仍然存在。所以我想创建另一个进程,它几乎唯一的功能就是在主进程关闭时保持内存。
为此,我将在辅助进程中使用CreateFileMapping 创建一块共享内存,并在主进程中告诉那些用于分配结构的new/delete 使用该块而不是进程的堆。
为了在主进程重新启动后恢复结构,我会为所有指针添加一个固定数量,以反映 MapViewOfFile 返回的映射视图的不同来源。
【问题讨论】:
-
是的,如果您在文件映射之上实现自己的堆管理器。
-
不要忘记同步。
-
@Roman 我的问题正是如何在 malloc/new 中使用现有的堆管理逻辑而不是从头开始实现它:)
-
@Raymond 如果你的意思是在进程之间共享一个简单的信号量布尔变量,那我不会忘记的!
-
并发访问,映射到不同进程中的不同地址,底层映射的固定大小——这些都是我立即想到的,你需要处理的事情。实现所有这些肯定是可能的,我只是怀疑您是否可以对其应用任何标准堆管理。
标签: winapi heap-memory shared-memory