基于磁盘的STL替换c++

Disk based STL replacement for c++

本文关键字:STL 替换 c++ 磁盘 于磁盘      更新时间:2023-10-16

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

我想要一些具有读/写缓冲机制的东西——因为我的应用程序每秒占用50k个入队/出队,而且对象相当小。

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

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

是的,请尝试STXXL。但是,如果可以避免随机访问,就不要使用deque(即运算符[])。请改用stxxl::序列,它在外部内存中是有效的。

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

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

您也可以为接口提供自己的后端,它必须满足SequenceContainer 的要求