Boost.进程间内存位置

Boost.Interprocess memory location

本文关键字:位置 内存 进程 Boost      更新时间:2023-10-16

在 Boost.Interprocess文档中 这是在哪里分配的? 声明 Boost.Interprocess 容器同时使用两种机制放置在共享内存中:

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

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

如果我想将此结构共享到另一个进程:

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

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

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

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

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