Адресное пространство процесса против виртуальной памяти - PullRequest
5 голосов
/ 13 ноября 2011

Из моего понимания, прочитав несколько статей, я предположил, что адресное пространство процесса (PAS) и виртуальная память (VM) совпадают.Мое понимание неверно?Может кто-нибудь, пожалуйста, пролить немного света на это и на меня зажечь?Я в замешательстве.

Я понимаю, что адресное пространство процесса не имеет никакого отношения к оперативной памяти или физической памяти.

Но просто запутался в PAS и VM.

1 Ответ

8 голосов
/ 29 марта 2012

Первый: «память» не равна «адресному пространству» . Адресное пространство - это диапазон возможных адресов. То есть это 4 Гб для 32-битных указателей и 16 Eb для 64-битных указателей. С другой стороны, память - это ... ну, память, которую вы действительно можете использовать (по крайней мере, возможно). Итак, держу пари, что вы спрашиваете, равно ли «память процесса» «виртуальной памяти» или «адресное пространство процесса» равно «виртуальному адресному пространству».

Секунда: Виртуальная память - это единственная память, которую вы можете использовать в пользовательском режиме. Вы не можете получить доступ к физической памяти. Физическая память предназначена для режима ядра и драйверов. Приложения пользовательского режима работают только с виртуальной памятью. Таким образом, вся память является виртуальной в режиме пользователя. Не нужно добавлять «виртуальный». Это по умолчанию.

Следовательно, «Адресное пространство процесса» = «[Виртуальное] Адресное пространство процесса» - то есть виртуальное адресное пространство одного процесса. То же самое касается «памяти»: «Память процесса» = «[Виртуальная] Память процесса».

Третье: Теперь термин «виртуальная память» обычно относится к «системной виртуальной памяти» (глобальная вещь), которая больше, чем один процесс. С другой стороны: поскольку адресация специфична для процесса, не существует такой вещи, как «Системное виртуальное адресное пространство» (глобальное адресное пространство всех процессов и ядра).

Итак, ответ:

  1. "Адресное пространство процесса" = "Виртуальное адресное пространство" = "Адресное пространство"
  2. «Память процесса» <> «Виртуальная память»

Примеры

Например, типичное ограничение для адресного пространства процесса составляет 4 Гб (для 32-разрядных приложений). Однако типичный предел виртуальной памяти процесса составляет 2 ГБ (который может быть увеличен до 3 ГБ для 32-разрядных компьютеров или до 4 ГБ для 64-разрядных компьютеров).

С другой стороны, виртуальная память больше, чем просто ваш процесс. Рассмотрим случай, когда вы выделяете память через функцию CreateFileMapping. Вы можете создать, скажем, блок виртуальной памяти 64 ГБ. Это нормально, хотя 64 Гб> 2 Гб. Конечно, вы не можете использовать все 64 ГБ одновременно (поскольку адресное пространство процесса составляет всего 4 ГБ), но вы можете сделать это порциями, скажем, на 512 МБ.

Кроме того, рассмотрим случай, когда вы сопоставляете один и тот же блок виртуальной памяти с местоположениями с множеством адресов (несколько адресов).

Другими словами, однозначного сопоставления между виртуальной памятью и виртуальным адресом не существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...