使用boost::interprocess,此庫公開此功能
。編輯:下面是一些你需要做的改變:
的例子已經定義了一個分配器將從共享內存塊分配,你需要這個傳遞給map
和queue
這意味着你將有改變你的定義:
class B
{
map<int, A, less<int>, MapShmemAllocator> table;
// Constructor of the map needs the instance of the allocator
B(MapShmemAllocator& alloc) : table(less<int>(), alloc)
{ }
}
對於queue
,這是稍微複雜,因爲事實上,它真的只是一個適配器,所以你需要真正的實現類通過作爲模板參數:
typedef queue<int, deque<int, QueueShmemAllocator> > QueueType;
現在你的類C
細微的變化:
class C
{
B entries;
QueueType d, e;
C(MapShmemAllocator& allocM, QueueShmemAllocator& allocQ) : entries(allocM), d(allocQ), e(allocQ)
{ }
}
現在從部門經理,建造的C
實例與分配器。
C *pC = segment.construct<C>("CInst")(allocM_inst, allocQ_inst);
我認爲應該這樣做。注意:您將需要提供兩個分配器(一個用於queue
和一個用於map
),不確定您是否可以從同一個段管理器構造兩個分配器,但我不明白爲什麼不。
來源
2012-08-31 07:22:06
Nim
這並不容易。對於知道共享內存的所有容器,您都需要一個特殊的分配器。在C++ 11中,由於有狀態的分配器,實現起來要容易一些,但在任何情況下都不是微不足道的。 –
哪個平臺? – tenfour
這是平臺相關的。 – someguy