tml*_*len 5 c c++ memory-management mmap large-data
我的程序适用于需要存储在连续内存(几千兆字节)中的大型数据集.使用std::allocator
(即malloc
或new
)分配内存导致系统停顿,因为大部分虚拟内存被保留,物理内存被填满.
由于程序一次只能处理一小部分,我的问题是如果使用内存映射文件会提供一个优势(即mmap
Windows等价物).这就是创建一个大的稀疏临时文件并将其映射到虚拟内存.或者是否有另一种技术会改变系统的分页策略,以便一次将较少的页面加载到物理内存中.
我试图避免构建一个一次加载文件部分的流机制,而是依赖于系统的vm分页.
是的,mmap
有可能加快速度.
需要考虑的事项:
malloc
并且free
将使用mmap
与MAP_ANON
反正.因此,映射文件的内存差异就在于您正在让VMM为您执行I/O操作.madvise
with mmap
来帮助VMM很好地进行分页.open
和read
(加上,正如erenon建议的那样posix_fadvise
)时,你的文件仍然保存在缓冲区中(即它不会被立即写出),除非你也使用O_DIRECT
.因此,在这两种情况下,您都依赖内核进行I/O调度. 归档时间: |
|
查看次数: |
996 次 |
最近记录: |