मैं प्रक्रियाओं के बीच कुछ तार साझा करने के लिए बढ़ावा :: इंटरप्रोसेस :: वेक्टर उपयोग कर रहा हूँ, और मुझे यकीन है कि मैं साझा स्मृति खंड में वह जीता है अतिप्रवाह नहीं है बनाना चाहते हैं।साझा स्मृति में एक बूस्ट इंटरप्रोसेस वेक्टर के आकार को कैसे मापूं?
मैं कैसे कितनी जगह पाते हैं वेक्टर स्मृति में लेता है, और एक विशेष खंड-आवंटित स्ट्रिंग कितनी मेमोरी लेगी?
typedef boost::interprocess::managed_shared_memory::segment_manager SegmentManager;
typedef boost::interprocess::allocator<char, SegmentManager> CharAllocator;
typedef boost::interprocess::basic_string<char, std::char_traits<char>, CharAllocator> ShmString;
typedef boost::interprocess::allocator<ShmString, SegmentManager> StringAllocator;
typedef boost::interprocess::vector<ShmString, StringAllocator> ShmStringVector;
const size_t SEGMENT_SIZE = ...;
addToSharedVector(std::string localString){
using namespace boost::interprocess;
managed_shared_memory segment(open_only, kSharedMemorySegmentName);
ShmStringVector *shmvector = segment.find<ShmStringVector>(kSharedMemoryVectorName).first;
size_t currentVectorSizeInShm = ?????(shmvector); <-------- HALP!
size_t sizeOfNewStringInSharedMemory = ?????(localString); <--------
//shared mutex not shown for clarity
if (currentVectorSizeInShm + sizeOfNewStringInSharedMemory < SEGMENT_SIZE) {
CharAllocator charAllocator(segment.get_segment_manager());
ShmString shmString(charAllocator);
shmFunctionName = localString.c_str();
shmvector->push_back(shmString);
}
}
ओह, वैसे, त्वरित और गंदा विधि इस जवाब में दिखाया गया है: http://stackoverflow.com/a/21009839/85371 – sehe