【发布时间】:2021-06-09 17:31:07
【问题描述】:
anonymous memory - 即程序堆和堆栈 - 是 Linux 上页面缓存的一部分吗?内核的链接文档没有说明这一点。
但是关于Page Cache 的维基百科条目包含一个图形(看右上角),这给我的印象是malloc() 在页面缓存中分配动态内存:
这有意义吗?关于mmap(),当它用于访问文件时,使用页面缓存是有意义的。通常也用于匿名内存,例如malloc() 和通过mmap() 的匿名映射?
我将不胜感激。
谢谢。
编辑 2021-03-14
我决定最好在他们的mailing-list 上询问内存子系统的内核维护人员。幸运的是Matthew Wilcox 回复并帮助了我。摘录:
-
page cache不处理匿名内存。 - 匿名页面有多种不同的处理方式——可以在
LRU lists(最近最少使用)上找到它们,也可以通过page tables找到它们。有点临时。 - 维基百科图表有误。它还包含更多缺陷。
- 如果系统提供交换并且匿名内存被交换 - 它进入
swap cache,而不是page cache。
【问题讨论】:
-
匿名内存由交换区支持,而不是文件系统。除此之外,它与任何其他虚拟内存基本相同。
-
我投票结束这个问题,因为这不是一个编程问题。似乎更适合Computer Science。
-
我不同意 Barmar 的观点。该问题专门针对 Linux,完整的答案将包括 Linux 内核编程材料/参考。 Linux 标签甚至不存在于计算机科学中。此外,链接的计算机科学标签中只有数百个关注者,但仅 Linux 标签就有 164k 关注者。希望这个问题保持开放,因为有人更有可能在这里回答。
-
我知道过度规范化是一个问题。我自己对这里的类似网站数量和重叠范围感到困惑。无论如何-我试图得到答案:)
-
CS 已关闭问题并建议其他站点,即 SO。我删除了自己的投票以结束 SO,并希望有人在这里回答。我希望有疑问的问题能在更广泛的网站上被接受并争取知识。
标签: linux memory-management linux-kernel heap-memory