【发布时间】:2015-01-29 18:19:44
【问题描述】:
我的程序适用于需要存储在连续内存(数 GB)中的大型数据集。使用std::allocator(即malloc或new)分配内存会导致系统停顿,因为大部分虚拟内存被保留并且物理内存被填满。
由于该程序一次只能处理一小部分,我的问题是使用内存映射文件是否会提供优势(即mmap 或 Windows 等效文件。)即创建一个大型稀疏临时文件和映射它到虚拟内存。或者是否有另一种技术可以改变系统的分页策略,从而一次将更少的页面加载到物理内存中。
我试图避免构建一次加载文件部分的流式传输机制,而是依赖系统的虚拟机分页。
【问题讨论】:
-
您在不同部分之间跳跃的频率如何?
-
这取决于算法(许多不同)。基本上,它们将分为以下几类: - 从头到尾的顺序读取 - 在不同的大段中并行顺序读取 - 大段内的随机访问(例如,在递归深度优先下降期间) - 其他随机访问
标签: c++ c memory-management mmap large-data