在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;
};
我想我希望其他进程可以访问这些向量,以便它可以迭代它们,对吗?
答案 0 :(得分:2)
find_or_construct
朋友可以直接分配。
将分配器传递给库类型,以类似的方式进行内部分配。否则,只有“控制结构”(例如典型std::string
的16个字节)将在共享内存中,而不是内部由标准库容器分配的所有相关数据。
答案 1 :(得分:0)
好吧,您无法从其他进程访问该向量,但您可以访问这些元素(因此在您的示例中为字符串),例如通过指针