Диспетчер кучи Windows — распределитель внешнего и внутреннего интерфейсов

«Важно отметить, что блок кучи может считаться занятым в глазах внутреннего распределителя, но все еще не используется приложением. Причина этого заключается в том, что любые блоки кучи, которые идут в списке внешнего распределителя, смотрят в сторону до сих пор их статус установлен как занят «. — Расширенная отладка Windows стр.267

Мой вопрос по этому поводу таков: если состояние блока кучи установлено как занятое, зачем распределителю внешнего интерфейса добавить его в список LAL как доступный для использования?

Другими словами, флаг состояния либо указывает, занят ли блок, либо свободен. Так почему же свободных блоков нет в LAL, и как эти блоки могут быть назначены в LAL, если их флаг состояния установлен на занят (они могут быть заняты или нет, как сказано в инструкции)?

1

Решение

Распределитель внешнего интерфейса добавил бы его в LAL как доступный для использования, потому что это является доступны для использования. Блок был освобожден для внешнего распределителя, вот как он получил блок в первую очередь. Следующему абоненту переднего распределителя, который запрашивает блок соответствующего размера, можно было бы дать этот блок, потому что с точки зрения внешнего распределителя он бесплатный. Ни один из его клиентов не использует это.

Смысл LAL состоит в том, чтобы минимизировать работу, выполняемую распределителем внешнего интерфейса. Поэтому то, что делает распределитель внешнего интерфейса, — это сохранять блоки, которые были освобождены для распределителя внешнего интерфейса в LAL, вместо того, чтобы возвращать их распределителю внутреннего интерфейса. Внутренний распределитель показывает их как занятых, потому что они являются занят — распределитель внешнего интерфейса использует их. Но они также бесплатны, внешний распределитель может назначать их, не изменяя их статус во внутреннем распределителе.

Если распределитель внешнего интерфейса изменил состояние занятости блоков в LAL, это полностью уничтожило бы точку LAL. Каждое добавление или удаление блока в LAL потребует обращения к внутреннему распределителю (для изменения статуса занятости), и весь смысл LAL состоял в том, чтобы препятствовать тому, чтобы внешний распределитель делал это.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]