Подтвердить что ты не робот

Какая разница между зарезервированной и преданной памятью?

Я понимаю, что память должна быть зарезервирована до совершения. И когда он зарезервирован, ни один другой процесс не может его использовать. Однако зарезервированная память не учитывает доступную оперативную память. Но не так ли? Потому что, если никто другой не сможет его использовать, то что хорошего в том, что он "доступен"?

Или есть какая-то большая разница?

4b9b3361

Ответ 1

В контексте Win32 "зарезервировано" означает, что адресное пространство выделяется в запрошенном ему процессе. Это может быть использовано, например, для резервирования пространства для большого буфера, который не все сразу необходимо, но когда это необходимо, оно должно быть смежным.

Резервная память вообще не взаимодействует с другими процессами, так как каждый процесс имеет собственное личное адресное пространство. Таким образом, утверждение, что "когда оно зарезервировано, ни один другой процесс не может его использовать", бессмысленно, так как процессы в любом случае не могут нормально распределять память в адресном пространстве другого процесса.

Когда зарезервированные страницы запрашиваются для фиксации (резервное хранилище, выделенное для них), эта операция может потерпеть неудачу из-за отсутствия физической памяти (или файла подкачки).

Ответ 2

Мне нравится просматривать Reserved как зарезервировать пространство address, чтобы никто другой не мог его выделить (но я не могу использовать память по этому адресу, потому что он еще не доступен). И Committed как отображение этого адресного пространства в физическую память, чтобы его можно было использовать.

Почему я хочу зарезервировать? Почему бы просто не захватить память? Я имею в виду несколько причин:

  • Некоторым приложениям нужен определенный диапазон адресов, например от 0x400000 до 0x600000, но для хранения чего-либо не требуется память. Он используется для блокировки доступа к памяти. Например, если какой-либо код обращается к такой области, он будет пойман. (Полезно по какой-то причине.)

  • Некоторым потокам необходимо хранить постепенно расширяющиеся данные. И данные должны быть в одном смежном фрагменте памяти. Предпочтительно, чтобы не было большой физической памяти за один раз, потому что она не нужна и была бы такой пустой тратой. Сначала память может быть использована некоторыми другими потоками. Физическая память передается только по требованию.

Ответ 3

Процессная виртуальная память (адресное пространство) и фактическое ОЗУ различаются. вы можете иметь 512 МБ физической памяти, но все же ваш процесс может адресовать виртуальное адресное пространство 4 ГБ (2 ГБ) Каждый адрес в процессе можно рассматривать как свободный, зарезервированный или совершенный в любой момент времени.

Процесс начинается со всех бесплатных адресов, что означает, что они свободны в совершении в память или зарезервированы для использования в будущем. Прежде чем использовать любой свободный адрес, он должен быть сначала назначен зарезервированным ИЛИ. Но он не должен быть зарезервирован для того, чтобы он был совершен.

резервирование памяти означает резервирование адресного пространства virtalul для будущих целей. он не связан с физической оперативной памятью (сопоставлен с адресами ОЗУ). Где в качестве выделенной памяти означает, что она будет связана с реальной ОЗУ, чтобы вы могли хранить в ней данные.

http://msdn.microsoft.com/en-us/library/ms810627.aspx