【问题标题】:Are shared memory segments compatible across boost versions and compiler versions共享内存段是否在 boost 版本和编译器版本之间兼容
【发布时间】:2014-10-30 12:45:38
【问题描述】:
我正在维护一个旧项目,现在它必须与另一个使用较新版本的 Visual Studio 和较新版本的 boost 构建的项目一起工作。为了与其他进程通信,第一个项目使用共享内存段,因此现在第二个项目必须读取(并写入)该段,但不能创建它。
这可能吗?有什么限制吗?我似乎没有找到任何关于它的文档。
涉及的 Boost 版本:1.35 和 1.55(可能会更新到 1.56)
Visual Studio 版本:8.0 和 2013。
【问题讨论】:
标签:
c++
visual-studio
boost
ipc
shared-memory
【解决方案1】:
这是一个有趣的问题。
在库级别,我假设不存在重大更改,除非它们是文档。
但是,还有很多事情需要考虑。
-
你正在分享记忆
这意味着您正在直接共享您的类的内存表示。
这意味着:
暗示:
-
您正在共享 ABI
这已经排除了兼容性,即使您碰巧使用了略有不同的编译器标志,相同的编译器/库版本。
换句话说,除非你控制两端并且可以确保它们是二进制兼容的,否则不要共享内存。
总结
Boost 的共享内存产品没有说明数据表示(除了“如果您可以将它链接到同一个二进制文件中,它就足以用于 IPC 访问”)。因此,如果您需要这种级别的隔离,请查看