I use boost :: interprocess :: vector to split some lines between processes, and I want to make sure that I do not overflow the shared memory segment in which it lives.
How do you know how much space a vector occupies in memory, and how much memory does a highlighted row allocated by a segment allocate?
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); <--------
source share