我保持在shared memory
兩個對象,其中之一是一類是:共享存儲器尺寸計算C++
class GlobalObj
{
public:
unsigned int counter;
unsigned int label;
bool isExist;
Globals(void){}
~Globals(void){};
};
而另外一個是boost::multi_index_container
其中認爲類型的對象:
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
項目中的共享內存大小相關的異常。
是否有任何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>());
所以,因爲我知道有多少項目會出現在我的容器什麼是最高效穩定的分配方式呢?
感謝您的回答。請參閱我的編輯。你能告訴我如何實現flat_map_reserved方式嗎? – Vecihi
@Vecihi我認爲代碼應該在鏈接的答案。我總是要包含運行代碼。只需使用第二個'#if'分支(如代碼所示) – sehe
好吧,我會嘗試一個並通知。謝謝。 – Vecihi