基于磁盘的STL替代c ++

时间:2013-11-18 19:24:29

标签: c++ memory stl

我最近构建了一个严重依赖stl队列的应用程序,并且遇到了内存问题,队列变得很大以适应机器内存。是否有任何磁盘支持的开源,IO /内存高效队列实现可以插入stl队列,使我的应用程序神奇地使用更少的RAM?

我想要一些带有读/写缓冲机制的东西 - 因为我的应用程序确实会有50k的队列/队列出局,并且对象相当小。

我的队列包含32位整数对,使每个条目占用64位,链接列表是不可能的,因为它们会使内存消耗加倍。

3 个答案:

答案 0 :(得分:6)

我会考虑使用STXXL。它使用文件系统后端重新实现了许多stl容器接口。其中一个实现是deque结构。

答案 1 :(得分:2)

是的,请尝试使用STXXL。 但是如果可以避免随机访问(即operator []),请不要使用deque。 使用stxxl :: sequence代替它,它在外部存储器中很有效。

免责声明:我正在恢复图书馆。如果您修复了C ++ 11问题,​​请给我一个补丁,这可能是由于MacOSX的工具链造成的。

答案 2 :(得分:0)

std::queue是一个容器适配器,这意味着它本质上是另一个容器上的接口。在这种情况下,默认值为std::deque,它在内存中表示为常量大小数组的向量,因为向量包含指向它非常适合内存的数组的指针。如果您需要的东西更不连续,您可以尝试使后端成为std::list,链接结构通常可以更好地处理非常大量的数据,因为它们不必是连续的。

您也可以将自己的后端提供给界面,它必须满足SequenceContainer的要求