增加没有共享内存的进程间字符串

时间:2013-10-16 08:56:27

标签: c++ string boost boost-interprocess

所以,这个问题与前一个问题相关联(std::string而没有从char*复制)。

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

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

是否有人使用提升管理字符串而没有共享内存?怎么样?

谢谢!

2 个答案:

答案 0 :(得分:0)

简短回答:不。

更长的答案:您必须了解您的std::string实施情况。请参阅LLVM的libcxx的here示例。你可以在那里获得你的char*,但它可能涉及丑陋的黑客,你必须调整你的代码以进行任何STL实现。

答案 1 :(得分:0)

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

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