C++ 基于磁盘的STL替换c++;

C++ 基于磁盘的STL替换c++;,c++,memory,stl,C++,Memory,Stl,我最近构建了一个严重依赖stl队列的应用程序,并且遇到了内存问题,队列变得越来越大,以适应机器内存。是否有任何磁盘备份的开源、IO/内存高效的队列实现可以插入stl队列,从而神奇地减少我的应用程序使用的RAM 我想要一些读/写缓冲机制的东西——因为我的应用程序确实在50k排队/出列pr秒左右,而且对象非常小 我的队列包含一对32位整数,使每个条目占用64位,链表是不可能的,因为它们将使内存消耗翻倍。std::queue是一个容器适配器,这意味着它本质上是另一个容器上的接口。在这种情况下,默认值是

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

我想要一些读/写缓冲机制的东西——因为我的应用程序确实在50k排队/出列pr秒左右,而且对象非常小


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

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

您也可以为接口提供自己的后端,它必须满足我将考虑使用的

的要求。它使用文件系统后端重新实现了许多stl容器接口。其中一种实现是针对deque结构的。

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


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

队列的底层容器是一个deque,如果您将其更改为一个列表,它将更适合内存(以性能为代价),尽管deque非常节省内存。@aaronman,老实说,我已经实现了一个循环的基于阵列的队列来压缩数据,我想要的是数量级,占用基于磁盘阵列的队列上的GIG是不好的,因为这样做会迫使内存被压缩contiguous@juanchopanza这正是我所想的,但是它看起来有点没有维护-没有c++11支持。。我可能不得不自己补充一句stxxl最大的问题是它似乎没有得到维护。。代码不会用c++11编译您确定它不会用c++11编译吗?文档中对C++0x和C++11的支持被集成并自动检测。STXXL的任何核心部分都不需要C++11。这可能只是测试。在文件中,包括从../include/STXXL/bits/common/utils.h:29:../include/STXXL/bits/compat/type_traits.h:19:10:致命错误:“找不到tr1/type_traits”文件#include似乎开发人员一直在积极更新您引用的特定文件--似乎您正在使用它编译器没有设置
\uuuugxx\ucx0x\uuuux0x
(我想您使用的是gcc?)。如果定义了(uugxx_CXX0X)| | uucplusplus>=201103L,您可以拉取该文件以将该行压缩为
。除此之外,任何库都可能存在特定于编译器的问题(但这稍微超出了这个问题的范围)。它看起来像是宏检查的一个实例,用于检查c++11,而不是重新编码Maverics附带的gcc。。