Что делает HeapValidate в windows? - PullRequest
1 голос
/ 26 апреля 2020

Я читал HeapValidate в существующем коде и пытался выяснить, что он делает. В документации говорится, что она проверяет, находятся ли структуры управления кучей в согласованном состоянии. Что это обозначает?

1 Ответ

0 голосов
/ 26 апреля 2020

Куча - это структура данных, как и любая другая, и в ее переменных метаданных-состояниях есть определенные условия, которые всегда должны выполняться. В качестве выдуманного примера, число дочерних элементов в узле дерева кучи всегда должно быть неотрицательным числом; поэтому, если HeapValidate () читает переменную child-count и видит, что она отрицательна, она знает, что что-то пошло не так, и может пометить этот блок как сломанный. любые ошибки, как метаданные кучи могут попасть в недопустимое / «невозможное» состояние, подобное этому. Поскольку структуры метаданных кучи находятся в том же адресном пространстве, к которому имеет доступ пользовательский код, это обычно является результатом ошибочного пользовательского кода, записывающего некоторые другие данные через недопустимый указатель, который указывает на область памяти, где происходит поле метаданных кучи проживать, молча переписывая / искажая метаданные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...