boost::进程间内存大小

Posted

技术标签:

【中文标题】boost::进程间内存大小【英文标题】:boost::interprocess memory size 【发布时间】:2012-05-14 15:48:28 【问题描述】:

我有一个 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;

我的问题是我需要确定我正在使用的共享内存的大小。 map的key是一个未知大小的std::string,数据是一个未知大小的模板类型,每个数据的大小都会变化。

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

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

【问题讨论】:

我的建议是看看我在你之前的问题上给出的答案,它解释了为什么这段代码是错误的,而你完全忽略了。 【参考方案1】:

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


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

【讨论】:

以上是关于boost::进程间内存大小的主要内容,如果未能解决你的问题,请参考以下文章

boost的问题:进程间共享内存

Boost 进程间分配器 - 管理文件大小

boost中的异常:进程间,共享内存对象删除

使用 boost 进程间库的 php exec 共享内存和 Cloudfoundry 容器问题

进程间通信:共享内存与线程对象访问

boost::multi_array 的内存大小