如果64位程序想要占用大量内存,那么在进程堆中还是从内存映射文件中分配内存是否重要?我理解内存映射文件的其他好处,例如跨两个或多个进程共享,但是,在我的情况下,内存映射中的数据不是跨进程共享的。
答案 0 :(得分:0)
不完全清楚你的意思是什么区别,特别是考虑到通过使用匿名mmap区域(即内存映射文件)来进行大量分配[通过某种大型定义依赖于C库中的设置]实际上并没有真正支持它们的文件 - 操作系统使用/ dev / zero作为“文件”,因此当从“文件”中读入内存时,它读为零。它永远不会被写回...] 。
换句话说,虽然“堆”是由C库管理的内存,但如果您手动管理内存映射文件,则必须在代码中执行“管理”,否则它就是同样的事情。
编辑:
回应评论:
这真的取决于:
malloc
可能会获胜。如果你正在处理的文件部分要大得多,那么任何一种方法都会有相同的内存使用率。如果你的内存少于你正在处理的实际数据量,那么这两种方法都不会提供良好的性能,因为在磁盘上读取/写入数据和/或分配/解除分配内存所花费的时间太多。
通常,将文件映射到内存是将数据加载到内存中的最快方法(操作系统在从磁盘到内存中最终位置的路上复制数据的次数较少)。但是对于任何相对较大的文件,数据脱离磁盘的实际速度将是主要因素,无论你做什么,这将占据读取1TB文件所需的时间。