“匿名内存”(即程序堆和栈)是否是Linux页面缓存的一部分?内核的链接文档没有说明这一点。但是,页面缓存的维基百科条目包含一个图形(请看右上角),给我留下了malloc()在页面缓存中分配动态内存的印象:
这有意义吗?关于“mmap()”,当它用于访问文件时,使用页面缓存是有意义的。对于匿名内存,例如“malloc()”和通过“mmap()”进行的匿名映射,通常也是如此。我希望得到一些解释。谢谢。 编辑于2021年3月14日
我决定向内存子系统的内核维护者们发送邮件询问邮件列表。幸运的是,Matthew Wilcox回复并帮助了我。摘录如下:
这有意义吗?关于“mmap()”,当它用于访问文件时,使用页面缓存是有意义的。对于匿名内存,例如“malloc()”和通过“mmap()”进行的匿名映射,通常也是如此。我希望得到一些解释。谢谢。 编辑于2021年3月14日
我决定向内存子系统的内核维护者们发送邮件询问邮件列表。幸运的是,Matthew Wilcox回复并帮助了我。摘录如下:
- 匿名内存不由
页面缓存
处理。 - 匿名页面以多种不同的方式处理 - 它们可以在
LRU列表
(最近最少使用)中找到,也可以通过页表
找到。有点临时性。 - 维基百科的图表是错误的,并且存在其他缺陷。
- 如果系统提供交换空间,并且匿名内存被交换 - 它会进入
交换缓存
,而不是页面缓存
。