基于磁盘的STL替换c++
Disk based STL replacement for c++
我最近构建了一个严重依赖stl队列的应用程序,遇到了内存问题,队列变得很大,无法容纳机器内存。有没有任何磁盘支持的开源、IO/内存高效的队列实现可以插入stl队列,使我的应用程序神奇地使用更少的RAM?
我想要一些具有读/写缓冲机制的东西——因为我的应用程序每秒占用50k个入队/出队,而且对象相当小。
我的队列包含成对的32位整数,使得每个条目都占用64位,链表是不可能的,因为它们会使内存消耗翻倍。
我会考虑使用STXXL。它通过文件系统后端重新实现了许多stl容器接口。其中一个实现是针对deque结构的。
是的,请尝试STXXL。但是,如果可以避免随机访问,就不要使用deque(即运算符[])。请改用stxxl::序列,它在外部内存中是有效的。
免责声明:我正在复兴图书馆。如果你修复了C++11问题,请给我一个补丁,这可能是由于MacOSX的工具链造成的。
std::queue
是一个容器适配器,这意味着它本质上是另一个容器上的接口。在这种情况下,默认值是std::deque
,它在内存中表示为恒定大小数组的向量,因为该向量包含指向数组的指针,所以它非常适合内存。如果您需要更不连续的东西,您可以尝试使后端成为std::list
,链接结构通常可以更好地处理大量数据,因为它们不必是连续的。
您也可以为接口提供自己的后端,它必须满足SequenceContainer 的要求
相关文章:
- 模板参数替换失败,并且未完成隐式转换
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 如何用转义符替换字符串中的所有特殊字符
- 在C应用程序中运行C++(带有STL)函数
- 使用2个键的cpp-stl::优先级队列排序不正确
- 在STL容器中使用模板类
- 为什么除非添加括号,否则构造函数上的模板替换会失败?
- 在一个读写器队列中,我可以用volatile替换原子吗
- 用现代C++STL数据结构替换旧的C风格数组
- 使用stl替换嵌套的子字符串
- 替换类似STL的映射中的值
- 基于磁盘的STL替换c++
- 如何替换我的"for"循环以通过 STL mimax 算法找到最小值/最大值
- 替换由谓词确定的 std::string 中的字符的最 stl-ish 方法是什么
- 使用STL替换for循环
- 用STL算法替换for循环,同时允许并行性
- 替换默认的STL分配器
- 传递参数pack来替换stl函数会导致编译错误
- 用Python生成器替换c++ STL输出迭代器