Search code examples
c++memory-managementboostboost-interprocess

boost::interprocess memory size


I have a managed_shared_memory objects that holds the map container SharedMap defined as follows.

typedef std::pair<std::string, T> ValueType;
typedef allocator<ValueType, managed_shared_memory::segment_manager> ShmemAllocator;
typedef map<std::string, T, std::less<std::string>, ShmemAllocator> SharedMap;

My issue is I need to determine the size of shared memory that I am using. The key of the map is a std::string of unknown size, and the data is a template type of unknown size where each data will varying in size.

Can anyone suggest how I can keep track of the memory I am using?

I'm new to boost::interprocess so any suggestion will help greatly.


Solution

  • I solved the issue by using exception handling. I insert into the map until a bad_alloc exception is thrown. I catch the exception and re-size the shared memory.


    I used the method static bool grow(const char *shmname, size_type extra_bytes) which should be a member function of managed_shared_memory