通过mmap()加载文件时的内存使用情况

时间:2009-08-06 14:08:16

标签: linux unix memory-management

想知道如果通过mmap()可以用于映射文件的最大内存量与linux框中的RAM大小之间存在关系。我试图记忆地映射一些文件,我发现当“Mapped”用法接近“MemTotal”(通过cat / proc / meminfo查看)时,我无法再映射任何文件。

  

来自64位linux盒子上的/ proc / meminfo:

     

MemTotal:32909628 kB

     

MemFree:221744 kB

     

缓冲区:1800 kB

     

映射:31642928 kB

     

CommitLimit:38012616 kB

     

Committed_AS:42641120 kB

     

VmallocTotal:536870911 kB

     

VmallocUsed:299920 kB

     

VmallocChunk:536568999 kB

所以,我是否正确地假设“映射”用法永远不会超过“MemTotal”。我的困惑是我认为当我们制作文件时,内存总是虚拟的。

谢谢!

2 个答案:

答案 0 :(得分:1)

不,除非你将memlock()编入内存,否则很可能会达到操作系统映射的地址空间限制。事实上它整齐地出现在32GB,与你的RAM一样,可能是巧合。

编辑:实际上,如果您正在使用MAP_PRIVATE,那么您可能确实会达到内存限制(MAP_PRIVATE被视为私有分配,因此需要物理RAM或交换覆盖它除非启用积极过度使用)。如果您还没有尝试使用MAP_SHARED。

答案 1 :(得分:0)

您可以将更大的文件映射到适合内存的块中(参见mmap的len和off参数)。