Я понял, что 2^32 = 4,294,967,296
и 2 ГБ - для ОС, а 2 ГБ - для процесса, но почему 64-битная ОС дает только 4 ГБ адресного пространства? Разве это не должно быть 2^64 = 18,446,744,073,709,551,615
которое при равномерном распределении между ОС и процессом намного превышает 4 ГБ?
3 ответа
Если вы посмотрите на ограничения памяти для выпусков Windows
Ограничение для виртуального адресного пространства в режиме пользователя x64 составляет не 4GB
а не менее 8TB
Некоторое объяснение, которое оправдывает ограничение 8Tb
.
По умолчанию 32- битный exe-файл ограничен 2GB
на 64-битной ОС, если только он не настроен с IMAGE_FILE_LARGE_ADDRESS_AWARE
2 ^ 32 (4 ГБ) - это максимальный объем адресного пространства, к которому можно обращаться одновременно с помощью 32-разрядных указателей. Таким образом, 32-разрядный процесс обязательно ограничен адресным пространством 4 ГБ, поскольку он использует 32-разрядные указатели независимо от ОС.
Обратите внимание, что это чисто ограничение виртуальной памяти, которое процесс может отображать в свое адресное пространство за один раз.
Ваши расчеты верны. При работе с 64-битной системой вам не нужно беспокоиться об адресном пространстве (это гораздо больше, чем поддерживает ваша система). Если размер оперативной памяти не соответствует предполагаемому, проблема заключается в другом. Возможно, ваша материнская плата ограничена, или некоторые флешки не поддерживаются / не работают.