Boost.Interprocess内存位置
Posted
技术标签:
【中文标题】Boost.Interprocess内存位置【英文标题】:Boost.Interprocess memory location 【发布时间】:2017-07-26 10:21:28 【问题描述】:在 Boost.Interprocess 文档 Where is this being allocated? 中指出,Boost.Interprocess 容器同时使用两种机制放置在共享内存中:
Boost.Interprocess construct、find_or_construct...函数。这些函数将 C++ 对象放在共享 记忆。但是 this 只放置对象,而不是 this 的内存 对象可以动态分配。 共享内存分配器。这些允许分配共享内存部分,以便容器可以动态分配片段 内存来存储新插入的元素。
在当前进程中存在内部内存的 boost.vector 的用例是什么,但使用共享内存分配器以便将元素放置在共享内存中?
如果我想将此结构共享给另一个进程:
struct Shared
vector<string> m_names;
vector<char> m_data;
;
我想我希望其他进程可以访问这些向量,以便它可以迭代它们,对吧?
【问题讨论】:
【参考方案1】:find_or_construct
和朋友们是为你自己直接分配的。
分配器将被传递给库类型,以类似的方式进行内部分配。否则,只有“控制结构”(例如,典型 std::string
的 16 个字节)将位于共享内存中,而不是标准库容器内部分配的所有相关数据。
【讨论】:
【参考方案2】:好吧,您不能从其他进程中访问向量,但您可以访问元素(因此在您的示例中为字符串),例如通过指针
【讨论】:
以上是关于Boost.Interprocess内存位置的主要内容,如果未能解决你的问题,请参考以下文章
boost::interprocess::named_mutex 是不是需要存储在共享内存中?
boost::interprocess 不在共享内存副本中的容器容器
为啥我不能使用 Boost.Interprocess 设置从一个进程通过另一个进程创建的一些内存?
使用 Boost.Interprocess 使进程等待直到资源加载到共享内存中