c++ - 共享内存段是否跨 boost 版本和编译器版本兼容

标签 c++ visual-studio boost ipc shared-memory

我正在维护一个旧项目,现在它必须与另一个使用较新版本的 visual studio 和较新版本的 boost 构建的项目一起工作。为了与其他进程通信,第一个项目使用共享内存段,所以现在第二个项目必须读取(并写入)这个段而不是创建它。

这可能吗?有什么限制吗?我似乎没有找到任何关于它的文档。

涉及的Boost版本:1.35和1.55(可能更新到1.56) Visual Studio 版本:8.0 和 2013。

最佳答案

这是一个有趣的问题。

在库级别,我假设不存在重大更改,除非它们是文档。

但是,还有很多事情需要考虑。

  1. 你正在共享内存

    这意味着您将直接共享类的内存表示。

    这意味着:

暗示:

  1. 您正在共享 ABI

    这已经排除了兼容性,即使您碰巧使用略有不同的编译器标志,使用相同的编译器/库版本。

换句话说,除非您控制两端并且可以确保它们二进制兼容,否则不要共享内存。

总结

Boost 的共享内存产品没有关于数据表示的说法(除了“如果你可以将它链接到同一个二进制文件中,它就足以进行 IPC 访问”)。所以,如果您需要这种级别的隔离,请查看

关于c++ - 共享内存段是否跨 boost 版本和编译器版本兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26653362/

相关文章:

c++ - 需要确保值在 0-255 之间

android - 如何将 "Chrome"(或等效项)作为线程而不是进程启动?

c++ - constexpr 和纯函数之间的关系

visual-studio - 如何关闭 Visual Studio 2013 预览版?

c++ - 如何捕获 boost asio boost::system::error_code 连接异常与其他异常分开?

c++ - 在 C++ 中索引整数指针

c# - 统一生成预制件作为游戏对象的 child

c++ - 作业 : Array's for C++

c++ - C++使用operator <<输出作为函数中的参数

c++ - 振奋 spirit : how to instruct the parser to read whole input and then report the result