Чому 32-розрядна Windows накладає обмеження на 2 Гб адресного простору, а 64-бітна Windows обмежує 4 ГБ?


5

Я розумію, що 2^32 = 4,294,967,2962 Гб - це ОС, а 2 ГБ - це процес, але чому 64-бітна ОС дає лише 4 ГБ адресного простору? Якщо це не так, 2^64 = 18,446,744,073,709,551,615якщо розподілити їх рівномірно між ОС і процесом набагато більше 4 Гб?


7
Вам слід уточнити, що ви говорите про адресний простір, доступний 32-бітовим процесам. 64-бітні процеси мають доступ до набагато більше 4 ГБ адресного простору.
Девід Шварц

1
32-розрядний додаток для 64-розрядної операційної системи обмежується точно такими ж обмеженнями, що і 32-бітний додаток для 32-розрядної операційної системи, всі структури операційної системи, необхідні 32-бітовій програмі, однакові. Єдиними програмами, які бачать справжні переваги у 64-бітних, є сама операційна система та 64-бітні програми.
Мокубай

Відповіді:


10

Якщо ви подивитеся на Обмеження пам’яті для Windows Releases

Обмеження для віртуального адресного простору в режимі користувача x64 не є, 4GBале принаймні8TB

Деякі пояснення, які виправдовують 8Tbмежу.

За замовчуванням 32- 2GBбітний exe також обмежений на 64-бітній ОС, якщо вона не налаштованаIMAGE_FILE_LARGE_ADDRESS_AWARE


3
Зауважте, що 64-бітні процеси повинні встановити IMAGE_FILE_LARGE_ADDRESS_AWARE у своєму заголовку PE, щоб отримати стільки віртуального адресного простору в режимі користувача, інакше вони обмежені 2 Гб, як 32-бітні процеси.
afrazier

5

2 ^ 32 (4 Гб) - це максимальна кількість адресного простору, на яку можна одночасно звертатися за допомогою 32-бітних покажчиків. Таким чином, 32-розрядний процес обов'язково обмежується адресним простором 4 Гб, оскільки він використовує 32-бітні вказівники, незалежно від ОС.

Зауважте, що це суто обмеження віртуальної пам'яті, яке процес може відобразити за один раз у своєму адресному просторі.


чому ліміт 2 гіг? 32-бітний вказівник може безпосередньо адресувати 4 гіга пам’яті. Я прочитав сторінку, на якій було сказано, що ви повинні бути обережними, роблячи математику вказівників за покажчиками з високим набором бітів, але крім цього, чому б існував ліміт 2 гіга? Здається, ніхто не знає "ЧОМУ?"
Світ

Ядро потребує певного адресного простору, і неприємно використовувати окремі адресні простори.
Девід Шварц

з того, що я прочитав, це захистити програмістів від випадкового виконання підписаної математики вказівника та отримання несподіваних результатів, якщо для одного вказівника встановлено високий біт, а інший - ні. Windows не потребує 2 гіга адресного простору. Що ви маєте на увазі його некрасиво використовувати окремий адресний простір? Ось для чого віртуальна пам'ять.
Світ

Ось чому 32-бітні процеси обмежуються 2 Гб у 64-розрядних версіях Windows, якщо вони конкретно не вказують на те, що безпечно надавати їм адресний простір 4 Гб. 32-розрядна Windows потребує щонайменше 1 ГБ адресного простору ядра, а за замовчуванням використовує 2 ГБ. Тут було б занадто складно пояснити, чому популярні 32-бітні операційні системи (включаючи Windows та Linux) не дають своєму ядру окремого адресного простору і замість цього використовують розділений користувач / ядро, але коротка причина полягає в тому, що це робить його дуже комплекс для взаємодії коду ядра з простором користувача.
Девід Шварц

1
Основна причина полягає в тому, що якби ядро ​​мало власний адресний простір, TLB потрібно було б обмивати при кожному переході ядра / користувача. Крім того, всі дані, скопійовані між ядром та користувальницьким простором, потребують операцій по перезапису чи віконцюванню.
Девід Шварц

-2

Ваші розрахунки правильні. Запуск 64-бітної системи вам не потрібно турбуватися про адресний простір (його набагато більше, ніж підтримує ваша система). Якщо розмір оперативної пам’яті не такий, як повинен бути, проблема полягає в іншому місці. Можливо, ваша материнська плата обмежує або деякі рамкові палиці не підтримуються / не ламаються.


1
Я не думаю, що ти зрозумів це питання.

1
Це добре - ОП, швидше за все, не зрозуміла відповіді.
Даніель Р Хікс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.