【问题标题】:(Win32) Heap shared between processes(Win32) 进程间共享堆
【发布时间】:2012-09-27 12:51:32
【问题描述】:

是否可以创建一个在进程之间共享的内存池(例如在 Win32 中从 CreateFileMappingINVALID_HANDLE_VALUE)然后将该块内存用作堆?

我希望 new/delete 运算符(或 malloc/free)从该块分配/释放内存(并对其进行通常的堆管理)。

谢谢。

编辑:我真正的问题很简单:目前我使用new 运算符正常分配各种大系列的结构,但我希望这些结构在进程关闭后仍然存在。所以我想创建另一个进程,它几乎唯一的功能就是在主进程关闭时保持内存。

为此,我将在辅助进程中使用CreateFileMapping 创建一块共享内存,并在主进程中告诉那些用于分配结构的new/delete 使用该块而不是进程的堆。

为了在主进程重新启动后恢复结构,我会为所有指针添加一个固定数量,以反映 MapViewOfFile 返回的映射视图的不同来源。

【问题讨论】:

  • 是的,如果您在文件映射之上实现自己的堆管理器。
  • 不要忘记同步。
  • @Roman 我的问题正是如何在 malloc/new 中使用现有的堆管理逻辑而不是从头开始实现它:)
  • @Raymond 如果你的意思是在进程之间共享一个简单的信号量布尔变量,那我不会忘记的!
  • 并发访问,映射到不同进程中的不同地址,底层映射的固定大小——这些都是我立即想到的,你需要处理的事情。实现所有这些肯定是可能的,我只是怀疑您是否可以对其应用任何标准堆管理。

标签: winapi heap-memory shared-memory


【解决方案1】:

感谢评论的人。

回答我自己的问题:

我放弃了将共享内存设为堆,我只是将结构的固定快照保存到另一个进程使用CreateFileMapping 分配的共享内存中。当进程重新启动时,我只是做相反的事情,使用OpenFileMappingMapViewOfFile

【讨论】:

    猜你喜欢
    • 2011-07-06
    • 1970-01-01
    • 1970-01-01
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    • 2019-07-04
    • 2012-07-22
    相关资源
    最近更新 更多