我正在维护一个旧项目,现在它必须与另一个使用较新版本的 visual studio 和较新版本的 boost 构建的项目一起工作。为了与其他进程通信,第一个项目使用共享内存段,所以现在第二个项目必须读取(并写入)这个段而不是创建它。
这可能吗?有什么限制吗?我似乎没有找到任何关于它的文档。
涉及的Boost版本:1.35和1.55(可能更新到1.56) Visual Studio 版本:8.0 和 2013。
最佳答案
这是一个有趣的问题。
在库级别,我假设不存在重大更改,除非它们是文档。
但是,还有很多事情需要考虑。
你正在共享内存
这意味着您将直接共享类的内存表示。
这意味着:
暗示:
您正在共享 ABI
这已经排除了兼容性,即使您碰巧使用略有不同的编译器标志,使用相同的编译器/库版本。
换句话说,除非您控制两端并且可以确保它们二进制兼容,否则不要共享内存。
总结
Boost 的共享内存产品没有关于数据表示的说法(除了“如果你可以将它链接到同一个二进制文件中,它就足以进行 IPC 访问”)。所以,如果您需要这种级别的隔离,请查看
- boost 序列化
- 结合EOS Portable Archives更大的便携性
关于c++ - 共享内存段是否跨 boost 版本和编译器版本兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26653362/