我了解到,在虚拟内存中,页面错误导致的惩罚是昂贵的。我们如何减少这个页面错误?我看到一个参数说明较小的页面大小减少了页面错误。为什么这是真的?
答案 0 :(得分:2)
要考虑为什么较小的页面大小可能会降低故障率,请考虑另一个方向的极端示例。假设您有2GB的物理内存和1GB大小的页面。一旦分配超过2GB的虚拟内存,您将拥有至少3页,其中只有2页适合内存。超过三分之一的内存访问会导致页面错误。
页面大小越小意味着您拥有更多粒度,允许操作系统执行更有针对性的交换。
当然(并非总是这样),需要权衡利弊。例如,较小的页面大小意味着更多的页面,这意味着管理页面的开销更大。
减少页面错误的一种方法是使用一个智能的内存分配器来分配可能在同一页面上同时使用的内存。
例如,在应用程序级别,存储区分配器(example)允许应用程序请求应用程序随后将分配的一块内存。应用程序可以将桶用于程序执行的特定阶段,然后将存储桶作为一个单元释放。这有助于最小化可能导致程序的活动和非活动部分从同一物理页面接收内存分配的内存碎片。