Короче говоря, Windows пытается минимизировать потребление памяти путем разбиения страниц на выделение ядра.
Более длинная версия: любое невыгружаемое выделение должно оставаться в физической памяти до освобождения.Таким образом, эти выделения занимают виртуальное адресное пространство и физическую память.Виртуальные адреса очень ограничены в 32-битной системе, и поэтому распределение драйверов осуществляется из ограниченного пространства (так как распределения являются глобальными).В 64-битной системе Windows имеется достаточно места для виртуальной машины, и это не представляет особой проблемы.
Однако для каждого выделения все еще используется физическая память.Память, которая поэтому недоступна пользователю, может быть маленькой (около 2,5% в настоящее время на моей машине).Больше беспокойства возникает при работе в среде виртуальных машин, так как эти распределения накапливаются.Таким образом, уменьшение количества невыгружаемых выделений позволит запускать больше экземпляров виртуальных машин на физическом компьютере.
Размещенные выделения могут быть выгружены на диск и, следовательно, доступны только на уровне PASSIVE и APC, иначе вы можете увидеть синий экранпоскольку Windows не может обработать ошибку страницы при более высоких значениях IRQL.
Чтобы повторить:
- , если ваш драйвер работает с DPC или выше IRQL, определите разумный раздел вашего кода / данных.в разделы, необходимые для этих уровней, и сделайте их НЕПРОСТРАНЕННЫМИ.
- , если ваш драйвер не изменяет IRQL и не принимает прерывания, тогда сделайте все выделения PAGED хорошими гражданами и минимизируйте использование физической памяти.1015 *