想知道如果通过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”。我的困惑是我认为当我们制作文件时,内存总是虚拟的。
谢谢!
答案 0 :(得分:1)
不,除非你将memlock()编入内存,否则很可能会达到操作系统映射的地址空间限制。事实上它整齐地出现在32GB,与你的RAM一样,可能是巧合。
编辑:实际上,如果您正在使用MAP_PRIVATE,那么您可能确实会达到内存限制(MAP_PRIVATE被视为私有分配,因此需要物理RAM或交换覆盖它除非启用积极过度使用)。如果您还没有尝试使用MAP_SHARED。
答案 1 :(得分:0)
您可以将更大的文件映射到适合内存的块中(参见mmap的len和off参数)。