所以,这个问题与前一个问题相关联(std::string
而没有从char*
复制)。
现在我遇到了boost:interprocess::string
,它允许在共享内存地址空间内构造字符串。由于我已经获得了char*
内存,因此我想知道是否可以重复使用boost:interprocess::string
来避免复制。
但是,我正在阅读的每一份文件都使用boost::interprocess::managed_shared_memory
及其兄弟姐妹。
是否有人使用提升管理字符串而没有共享内存?怎么样?
谢谢!
答案 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 读取。
以我的拙见,答案是否定的。但是我会等待更有经验的开发人员。