我正在做一个在Linux上运行的程序,它使用mmap将一些文件映射到内存。
每一个文件都会被读取(用指针在内存中行走)。
在pmap中你可以清楚地看到一些文件是如何完全映射到内存中的(当完全读取时),而其他文件则没有。
Address Kbytes RSS Dirty Mode Mapping
00007f8b09c3a000 26688 26664 0 rw-s- /mnt/ebs-metadata/fullyread.dat
00007f89ecc0c000 15936 4704 0 rw-s- /mnt/ebs-metadata/partiallyread.dat
我们继续映射文件,在某一时刻,我们得到一个错误,说不能分配更多的内存。
是的,我们可以卸载很多文件,我们会这样做)。
我的问题是:为什么操作系统不从物理内存中卸载许多页(甚至是完整的文件),直到下一次使用,而不是抛出 "无法分配内存"?