我保留了两个对象shared memory
,其中一个是一个类,它是:
class GlobalObj
{
public:
unsigned int counter;
unsigned int label;
bool isExist;
Globals(void){}
~Globals(void){};
};
另一个是boost::multi_index_container
包含该类型对象的 a:
class TestObj
{
public:
long id;
unsigned _int64 track1;
unsigned _int64 track2;
int label;
MetaData(void){};
~MetaData(void){};
};
因此,当我构建共享内存时,我以这种方式计算大小:
// TEST_CONTAINER_SIZE is a constant which is the
// maximum number of record that multi_index container will keep
size_t containerSize = TEST_CONTAINER_SIZE * sizeof(TestObj);
// create shared memory
managed_shared_memory segment(create_only,"SharedMemory", containerSize + sizeof(GlobalObj));
因此,当我设置时,TEST_CONTAINER_SIZE = 10000;
我希望我可以插入10000 TestObj
到共享内存中的 multi_index 容器中。3071th
但是当我运行程序时,它会触发一个与item中的共享内存大小相关的异常。
multi_index 容器本身是否有任何开销,或者在计算共享内存的大小时我是否遗漏了任何其他东西?
谢谢。
编辑:
因此,在我当前的实现中,我的 multi_index 容器和分配如下所示:
typedef multi_index_container<
TestObj,
indexed_by<
ordered_unique<member<TestObj, long, &TestObj::id> >,
ordered_non_unique< member<TestObj, unsigned _int64, &TestObj::track1> >
>,
boost::interprocess::managed_shared_memory::allocator<TestObj>::type
> ContainerType;
segment = new managed_shared_memory(open_only, "SharedMemory");
DataContainer = segment->construct<ContainerType>
("DataContainer") //Container's name in shared memory
( ContainerType::ctor_args_list()
, segment->get_allocator<TestObj>());
因此,既然我知道我的容器中有多少物品,那么最有效和最稳定的分配方式是什么?