managed_shared_memory 与 windows_shared_memory
Posted
技术标签:
【中文标题】managed_shared_memory 与 windows_shared_memory【英文标题】:managed_shared_memory vs windows_shared_memory 【发布时间】:2017-09-01 09:28:04 【问题描述】:我目前正在查看 Boost 的进程间库的文档,并试图找出其中的区别。
据我所知,唯一的区别是持久性(windows 共享内存在最后一个进程退出时释放,managed_shm 仅在被告知时才释放),是否还有其他差异,例如速度等我错过了?
【问题讨论】:
平台兼容性?windows_shared_memory
之类的东西似乎非常特定于平台。
没错,它只是windows,但使用它肯定比managed_shared_memory 有一些优势?
我想它完全具有 windows 平台上共享内存的功能,而不是 boost::interprocess 支持的所有平台上可用的通用功能子集
对我来说,优点是它会在进程退出时自行清理。这就是我想要的,我正在编写一个非常复杂的系统来清理旧的“会话”,这些“会话”在新会话启动时被杀死,这是一场可怕的噩梦。然后我找到了 Windows 本机版本,并删除了整个混乱。如果您需要持久性,那么另一个就是您想要的,但否则假设您只是 Windows,然后转到 Windows 本机以防止 imo 泄漏。
【参考方案1】:
区别在于 managed_shared_memory
遵循 POSIX 要求,因此 emulating the parts 缺少 windows_shared_memory
(即持久性)。这是完成via memory file mapping。
managed_shared_memory
的缺点似乎是与其他应用程序(使用本机 Windows 共享内存)的互操作性,并且在首次访问时可能会加快速度。另一方面,windows_shared_memory
的缺点是缺乏系统间的可移植性。
【讨论】:
以上是关于managed_shared_memory 与 windows_shared_memory的主要内容,如果未能解决你的问题,请参考以下文章
如何从 boost::interprocess::managed_shared_memory 对象中获取 shmid
在 Boost Interprocess managed_shared_memory 中搜索时,线程陷入互斥等待
如何在程序崩溃后释放 managed_shared_memory:在调试期间使用哪些有效技术?
检查 Boost Interprocess managed_shared_memory 是不是已经存在? [复制]