“重要的是要注意,在后端分配器的眼中,堆块可能被认为是繁忙但仍未被应用程序使用。这背后的原因是前端分配器上的任何堆块都是看看旁边列表仍然将其状态设置为忙碌。“ - 高级Windows调试p.267
我的问题是:如果堆块状态设置为忙,为什么前端分配器会将它添加到LAL中以供使用?
换句话说,状态标志表示块正忙或空闲。那么为什么空闲块不在LAL中,如果它们的状态标志设置为忙,那么如何将这些块分配给LAL(它们可能忙或不忙,如声明所说)?
答案 0 :(得分:3)
前端分配器会将其添加到LAL中以供使用,因为 可供使用。该块被释放到前端分配器,这就是它首先获得块的方式。请求具有适当大小的块的前分配器的下一个调用者可以被赋予该块,因为从前端分配器的角度来看,它是空闲的。它的客户都没有使用它。
LAL的目的是最小化前端分配器使后端分配器所做的工作。所以前端分配器所做的是保留在LAL中释放到前端分配器的块,而不是将它们返回到后端分配器。后端分配器将它们显示为忙,因为它们 忙 - 前端分配器正在使用它们。但它们也是免费的,前端分配器可以分配它们,而不必在后端分配器中更改它们的状态。
如果前端分配器改变了LAL中块的忙状态,那将完全击败LAL的点。每次在LAL上添加或删除块都需要与后端分配器通信(以改变繁忙状态),并且LAL的整个点是为了防止前端分配器必须这样做。