【发布时间】:2018-04-05 13:36:26
【问题描述】:
我正在尝试使用boost::interprocess 在共享内存中分配一个非常简单的数据结构,但我无法完全弄清楚如何使用boost interprocess allocators 在我分配为的共享内存段中执行内存分配/解除分配关注
using namespace boost::interprocess;
shared_memory_object::remove("MySharedMem");
mSharedMemory = std::make_unique<managed_shared_memory>(
open_or_create, "MySharedMem", 65536);
我之前问过类似的question,但不幸的是我从来没有得到任何答案。下面的MyStruct 本质上是一个数组,其长度字段指示数组的大小。现在我有一个简单的长度字段,但稍后我会添加一些其他构造函数参数(布尔值和其他简单类型)。
为了在共享内存段中分配它,我知道我必须对分配器做一些事情,但我找不到一个类似的例子,我有一个包含数组/指针字段的用户定义类型。
using MyType = struct MyType {
explicit MyType(const size_t aSize)
: mSize(aSize)
, mpData(new char[aSize])
{}
~MyType() {
delete[]mpData;
}
size_t mSize;
char * mpData;
};
using MyTypeAllocator = boost::interprocess::allocator<MyType,
boost::interprocess::managed_shared_memory::segment_manager>;
// Initialize the shared memory STL-compatible allocator
MyTypeAllocator alloc(mSharedMemory->get_segment_manager());
【问题讨论】:
-
你需要教
MyType也使用分配器而不是使用operator new。 -
@T.C.谢谢,关于我如何做到这一点的任何指示?我一直在寻找一些简单的例子。使用 int 或 uint32_t 非常简单,因为它们很简单,带有指针字段的结构的问题是 sizeof() 很有趣,因为它不考虑也需要存储的分配字节的大小。我认为这与 boost::interprocess 世界中的节点有关,但我对此很陌生。
标签: c++ c++11 boost shared-memory boost-interprocess