Pageheap потребляет много памяти

Я использовал pageheap для отладки повреждений кучи в последние четыре года. В общем, у меня нет проблем с этим. Но теперь я столкнулся со странным поведением. После включения pageheap для моего процесса на хосте win7-sp1-x86 с использованием глобальных флагов со следующими флагами: -Включить проверку хвоста кучи -Включить проверку без кучи -Включить кучи страницы

Я заметил сбои с исключениями нехватки памяти. Команда!address -summary говорит, что ~90% виртуальной памяти было использовано PageHeap.

Это действительно странно для меня, потому что, как я знаю, pageheap не должен приводить к таким большим объемам памяти.

Может кто-нибудь объяснить, в чем причина такого поведения?

1 ответ

При запуске приложения с включенной полной кучей страниц, для каждого "malloc" выделяется 2 страницы (4 КБ). Когда память освобождается, эти страницы (или могут быть только первыми) все еще "зарезервированы": они не занимают какую-либо физическую или файловую память страницы, но диапазон виртуальных адресов становится недоступным, и нарушение прав доступа возникает, когда пытаясь получить доступ к этой памяти. Это позволяет выявлять ошибки, доступные для чтения после освобождения. Таким образом, виртуальное адресное пространство приложения продолжает увеличиваться, даже если вы правильно вызываете free для каждого malloc.

Другие вопросы по тегам