Windows堆pipe理器 – 前端和后端分配器

“需要注意的是,在后端分配器的眼中,堆块可能被认为是忙碌的,但是仍然没有被应用程序使用,原因在于前端分配器的旁边列表中的任何堆块仍然有他们的状态设置为忙“。 – 高级Windowsdebuggingp.267

我的问题reguarding这是:如果堆块状态设置为繁忙,为什么前端分配器将它添加到LAL作为可用?

换句话说,状态标志或者表示该块是忙的还是空闲的。 那么为什么空闲块不在LAL中,如果这些块的状态标志设置为繁忙(它们可能是繁忙的或者不像语句所说的那样),那么这些块如何分配给LAL?

前端分配器会将其添加到LAL中,因为它可供使用。 该块被释放到前端分配器,这是如何得到块的第一位。 前端分配器的下一个调用者请求一个合适大小的块可以被赋予该块,因为从前端分配器的角度来看,它是免费的。 没有一个客户正在使用它。

LAL的要点是尽量减少前端分配器使后端分配器所做的工作。 那么前端分配器所做的就是保留在LAL中被释放到前端分配器的块,而不是将它们返回到后端分配器。 后端分配器显示为忙,因为它们很忙 – 前端分配器正在使用它们。 但是它们也是免费的,前端分配器可以分配它们而不必在后端分配器中改变它们的状态。

如果前端分配器改变了LAL中的块的忙状态,那将完全击败LAL的点。 在LAL上添加或删除一个块需要与后端分配器交谈(改变忙碌状态),而LAL的整点是防止前端分配器必须这样做。