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 constructfind_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 使进程等待直到资源加载到共享内存中

boost::interprocess 共享内存段函数 find() 如果段已经存在,则在启动时挂起

boost::interprocess scoped_allocator AND 不在共享内存中的容器的容器