Pageheap потребляет много памяти
Я использовал pageheap для отладки повреждений кучи в последние четыре года. В общем, у меня нет проблем с этим. Но теперь я столкнулся со странным поведением. После включения pageheap для моего процесса на хосте win7-sp1-x86 с использованием глобальных флагов со следующими флагами: -Включить проверку хвоста кучи -Включить проверку без кучи -Включить кучи страницы
Я заметил сбои с исключениями нехватки памяти. Команда!address -summary говорит, что ~90% виртуальной памяти было использовано PageHeap.
Это действительно странно для меня, потому что, как я знаю, pageheap не должен приводить к таким большим объемам памяти.
Может кто-нибудь объяснить, в чем причина такого поведения?
1 ответ
При запуске приложения с включенной полной кучей страниц, для каждого "malloc" выделяется 2 страницы (4 КБ). Когда память освобождается, эти страницы (или могут быть только первыми) все еще "зарезервированы": они не занимают какую-либо физическую или файловую память страницы, но диапазон виртуальных адресов становится недоступным, и нарушение прав доступа возникает, когда пытаясь получить доступ к этой памяти. Это позволяет выявлять ошибки, доступные для чтения после освобождения. Таким образом, виртуальное адресное пространство приложения продолжает увеличиваться, даже если вы правильно вызываете free для каждого malloc.