0

所以,这个问题与前一个问题相关联(std::string不复制 from char*)。

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

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

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

谢谢!

4

2 回答 2

0

简短的回答:没有。

更长的答案:您必须了解您的std::string实施。参见LLVMlibcxx 示例。你可以进去char*,但它可能涉及丑陋的黑客攻击,你必须调整你的代码以适应任何 STL 实现。

于 2013-10-16T09:44:19.170 回答
0

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

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

于 2017-06-05T05:02:38.920 回答