【问题标题】:boost::interprocess memory sizeboost::进程间内存大小
【发布时间】: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 的新手,所以任何建议都会有很大帮助。

【问题讨论】:

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

标签: c++ memory-management boost boost-interprocess


【解决方案1】:

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


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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多