Boost.Interprocess内存位置

时间:2017-07-26 10:21:28

标签: c++ boost boost-interprocess

在Boost.Interprocess文档Where is this being allocated?中,声明Boost.Interprocess容器同时使用两种机制放在共享内存中:

  
      
  • Boost.Interprocess 构建<>, find_or_construct <> ...函数。这些函数将C ++对象放在共享中   记忆。但是这只放置了对象,而不是这个内存   对象可以动态分配。
  •   
  • 共享内存分配器。这些允许分配共享内存部分,以便容器可以动态分配片段   用于存储新插入元素的内存。
  •   

有一个boost.vector是什么用例,其中内部存储器存在于当前进程中,但使用共享内存分配器以便元素放在共享内存中?

如果我想将此结构分享给另一个进程:

struct Shared
{
    vector<string> m_names;
    vector<char>   m_data;
};

我想我希望其他进程可以访问这些向量,以便它可以迭代它们,对吗?

2 个答案:

答案 0 :(得分:2)

find_or_construct朋友可以直接分配。

将分配器传递给库类型,以类似的方式进行内部分配。否则,只有“控制结构”(例如典型std::string的16个字节)将在共享内存中,而不是内部由标准库容器分配的所有相关数据。

答案 1 :(得分:0)

好吧,您无法从其他进程访问该向量,但您可以访问这些元素(因此在您的示例中为字符串),例如通过指针