【问题标题】:Boost.Interprocess memory locationBoost.Interprocess内存位置
【发布时间】: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;
};

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

【问题讨论】:

    标签: c++ boost boost-interprocess


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-28
        • 2020-07-24
        • 2012-10-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多