2017-07-26 88 views
0

在Boost.Interprocess中文档Where is this being allocated?中指出,Boost.Interprocess中容器使用在同一时间两种机制放置在共享存储器:Boost.Interprocess中存储器位置

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

什么是用例为具有boost.vector其中内部存储器住在当前过程,但使用的共享存储器分配器,使得元件被放置在共享存储器?

如果我想分享这个结构到另一个进程:

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

我想我要的载体可访问到其他进程,这样就可以对其进行迭代,对不对?

回答

2

find_or_construct和朋友是你自己的直接分配。

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

0

那么,你不能从另一个进程访问这个向量,但是你可以访问这些元素(例如你的例子中的字符串),例如通过指针