【发布时间】:2014-12-06 00:05:35
【问题描述】:
我正在使用 boost::interprocess::vector 在进程之间共享一些字符串,并且我想确保不会溢出它所在的共享内存段。
如何找到向量在内存中占用的空间,以及特殊段分配的字符串将占用多少内存?
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);
}
}
【问题讨论】:
标签: c++ boost shared-memory