उपयोग 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
के लिए एक) प्रदान करने की आवश्यकता होगी, सुनिश्चित नहीं है कि आप एक ही सेगमेंट मैनेजर से दो आवंटकों का निर्माण कर सकते हैं, लेकिन मुझे नहीं लगता कि क्यों नहीं।
यह आसान नहीं है। आपको अपने सभी कंटेनर के लिए एक विशेष आवंटक की आवश्यकता होगी जो साझा स्मृति के बारे में जानता है। सी ++ 11 में यह राज्य के आवंटकों को धन्यवाद लागू करने के लिए थोड़ा आसान है, लेकिन यह किसी भी घटना में गैर-तुच्छ है। –
कौन सा मंच? – tenfour
यह मंच-निर्भर है। – someguy