Миф: Опция /3GB позволяет мне использовать гигантский блок памяти, размером 3ГБ.


Перевод с блога The Old New Thing. Оригинал здесь.

Только потому что размер виртуального адресного пространства теперь равен 3ГБ еще не означает, что можно использовать один непрерывный блок памяти размером 3Гб. Стандартные дырки в виртуальном адресном пространстве по-прежнему присутствуют – 64К у нижней и верхней границ 2Гб диапазона.

Более того, системные DLL библиотеки продолжают загружаться по своим предполагаемым базовым адресам, которые располагаются сразу под границей 2Гб . Динамическая память процесса и прочие системные данные также откусывают понемногу от вашего виртуального адресного пространства.

В результате, даже хотя пользовательское виртуальное адресное пространство имеет размер около 3Гб, оно не доступно непрерывным блоком. Дырки около границ 2Гб диапазона не позволяют вам получить даже 2Гб непрерывного адресного пространства.

Можно попытаться переместить системные DLL библиотеки так, чтобы освободить больше места, но это не работает по нескольким причинам. Во-первых, это не ликвидирует 64Кб щели на границах 2Гб. Во-вторых, система выделяет память для своих объектов, таких как блоки с информацией о потоках и переменные окружения процесса еще до того, как запускается ваша программа, таким образом, что к тому моменту, когда ваша программа собирается выделить память, требуемое пространство уже будет использоваться.

В-третьих, операционной системе необходимо, чтобы некоторые ключевые DLL библиотеки были загружены по одним и тем же адресам во всех процессах. Например, ловушки системных вызовов должны располагаться по фиксированным адресам, чтобы обработчик заглушек, работающий в режиме ядра, распознал их как нормальный системный вызов, а не как недопустимую инструкцию. Отладчик также этого требует, так как он может использовать функцию CreateRemoteThread чтобы внедрить точку останова в процесс, когда вы хотите остановить выполнение процесса, который вы отлаживаете.

Реклама
Запись опубликована в рубрике память. Добавьте в закладки постоянную ссылку.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s