Я розумію, що 2^32 = 4,294,967,296
2 Гб - це ОС, а 2 ГБ - це процес, але чому 64-бітна ОС дає лише 4 ГБ адресного простору? Якщо це не так, 2^64 = 18,446,744,073,709,551,615
якщо розподілити їх рівномірно між ОС і процесом набагато більше 4 Гб?
Я розумію, що 2^32 = 4,294,967,296
2 Гб - це ОС, а 2 ГБ - це процес, але чому 64-бітна ОС дає лише 4 ГБ адресного простору? Якщо це не так, 2^64 = 18,446,744,073,709,551,615
якщо розподілити їх рівномірно між ОС і процесом набагато більше 4 Гб?
Відповіді:
Якщо ви подивитеся на Обмеження пам’яті для Windows Releases
Обмеження для віртуального адресного простору в режимі користувача x64 не є, 4GB
але принаймні8TB
Деякі пояснення, які виправдовують 8Tb
межу.
За замовчуванням 32- 2GB
бітний exe також обмежений на 64-бітній ОС, якщо вона не налаштованаIMAGE_FILE_LARGE_ADDRESS_AWARE
2 ^ 32 (4 Гб) - це максимальна кількість адресного простору, на яку можна одночасно звертатися за допомогою 32-бітних покажчиків. Таким чином, 32-розрядний процес обов'язково обмежується адресним простором 4 Гб, оскільки він використовує 32-бітні вказівники, незалежно від ОС.
Зауважте, що це суто обмеження віртуальної пам'яті, яке процес може відобразити за один раз у своєму адресному просторі.
Ваші розрахунки правильні. Запуск 64-бітної системи вам не потрібно турбуватися про адресний простір (його набагато більше, ніж підтримує ваша система). Якщо розмір оперативної пам’яті не такий, як повинен бути, проблема полягає в іншому місці. Можливо, ваша материнська плата обмежує або деякі рамкові палиці не підтримуються / не ламаються.