假设,我有一个非常大的std::map< unsigned int, Foo > FooDB
,它在内存中保存Foo
对象,可以通过它们的 ID 检索。现在可能有Foo
比可用内存更多的对象来存储它们。所以我想有以下构造:
- 检索
Foo
ID为x的对象FooDB
- 如果对象x在 中
FooDB
,则返回它 - 如果不是,请从 HD 加载它,尝试将其存储起来以
FooDB
供进一步查询- 有足够的可用内存:将其添加到
FooDB
- 内存不足:通过
FooDB
从未使用的对象中删除来释放一些空间(最旧的查询时间戳)
- 有足够的可用内存:将其添加到
我想为 保留一些内存,但FooDB
我不知道其中可以存储多少个Foo
对象,因为它们的大小不同。
关于如何实现这一点的任何想法?
编辑
我的基本问题是:我怎样才能知道 astd::map
的内存大小?当然,存储在其中的所有堆对象都包括在内。我怎么知道内存不足的部分何时到达?