提升没有共享内存的进程间字符串



所以,这个问题链接到前一个问题(std::string没有从char*复制)。

现在我遇到了boost:interprocess::string,它允许在共享内存地址空间内构造字符串。由于我已经有了char*内存,我想知道是否可以重复使用boost:interprocess::string以避免复制。

但是,我正在阅读的每个文档都使用boost::interprocess::managed_shared_memory及其兄弟姐妹。

是否有人在使用没有共享内存提升托管字符串?如何?

谢谢!

简短回答:不。

更长的答案:您必须了解您的std::string实施。例如,请参阅此处的 libcxx by LLVM。你可以把你的char*放在那里,但它可能涉及丑陋的黑客,你必须调整你的代码以适应任何STL实现。

问题是你的字符 * 指向你的进程(堆)的内存,当进程不再运行此内存无效时。共享内存在进程之间共享。您必须从 char * 复制到共享内存段,在我看来这是唯一的选择。请告诉我你的字符*指向堆上的位置?

但是从共享内存或内存映射文件读取可以在不复制的情况下完成,您可以使用像 string_view 这样的容器 boost::string_ref 或 boost::string_view 或 C++17 std::string_view include <experimental/string_view> 。这些是没有所有权的容器,允许您通过{char * , size}引用内存,但是由于共享内存是共享的,因此很难想象它是否可以是生产质量的代码,因为任何进程都可以更改您的内存,除非您从不写入而只从SHM读取。以我的拙见,答案是否定的。但是,我将等待更有经验的开发人员。

最新更新