1

我有一个managed_shared_memory对象,其中包含SharedMap定义如下的地图容器。

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;

我的问题是我需要确定我正在使用的共享内存的大小。地图的键是一个未知大小的std::string,数据是一个未知大小的模板类型,其中每个数据的大小都会有所不同。

谁能建议我如何跟踪我正在使用的内存?

我是 boost::interprocess 的新手,所以任何建议都会有很大帮助。

4

1 回答 1

3

我通过使用异常处理解决了这个问题。我插入到地图中,直到bad_alloc抛出异常。我捕捉到异常并重新调整共享内存的大小。


我使用了static bool grow(const char *shmname, size_type extra_bytes)应该是成员函数的方法managed_shared_memory

于 2012-05-15T20:31:58.997 回答