Скільки пам’яті може мати доступ 32-бітний процес у 64-бітовій операційній системі?


86

У Windows за звичайних обставин 32-бітний процес може отримати доступ лише до 2 Гб оперативної пам'яті (або до 3 Гб за допомогою спеціального перемикача у файлі boot.ini). Скільки доступної пам’яті під час запуску 32-бітового процесу в 64-бітовій операційній системі? Чи є якісь спеціальні перемикачі або налаштування, які можуть це змінити?


Відповіді:


92

2 Гб за замовчуванням. Якщо програма має значний адресний простір (пов’язана з / LARGEADDRESSAWARE), вона отримує 4 ГБ (не 3 ГБ, див. Http://msdn.microsoft.com/en-us/library/aa366778.aspx )

Вони все ще обмежені 2 ГБ, оскільки багато додатків залежить від верхнього біта покажчиків, щоб бути нульовим.


5
Хтось може пояснити, чому процеси не можуть отримати доступ до повних 4 Гб?
BlueTrin

1
Що ви маєте на увазі? Якщо ви створюєте його самостійно, ви можете використовувати прапорець / LARGEADDRESSAWARE і зробити так, щоб він працював з 4 ГБ, якщо ні, тоді ви на милість розробників, які це зробили.
SilverbackNet

Чи тому, що покажчик може бути небезпечно інтерпретований із доповненням двох?
rosstex

1
Під цим - since many application depends on the top bit of pointers to be zeroви маєте на увазі, що 32-й біт схеми адресації не враховується і не використовується під час обходу адресного простору процесу.
RBT

21

4 ГБ мінус те, що використовується системою, якщо ви зв’язуєтесь з / LARGEADDRESSAWARE.

Звичайно, ви повинні бути ще обережнішими з арифметикою покажчика, якщо ви встановите цей прапор.


-1: система буде використовувати 64-бітові адреси для себе, тому немає необхідності щось віднімати
Thomas Weller

@ThomasW., Це неправда, принаймні у Windows. WOW64 все ще вимагає 32-розрядних файлів для 64-розрядних системних дзвінків. Дивіться msdn.microsoft.com/en-us/library/windows/desktop/…
MSN

1
Ви маєте на увазі ці 605 кБ бібліотек DLL? На жаль, я цього не зрозумів, оскільки питання стосувалося більше ГБ пам’яті.
Thomas Weller

7
@ThomasW., Тому я сказав "мінус те, що використовується системою".
MSN

FYI Посилання мертве на цьому
jjxtra

14

Здається, ніхто не торкається того факту, що якщо у вас багато різних 32-розрядних додатків, підсистема wow64 може зіставити їх де завгодно в пам'яті вище 4G, тож на 64-розрядних вікнах з достатньою пам’яттю ви можете запускати ще багато 32-розрядних додатків ніж на власній 32-бітовій системі.


7
Ви говорите про фізичну оперативну пам’ять, де OP говорить про віртуальну пам’ять. Навіть на 32-розрядних системах ви можете запускати багато додатків, якщо файл вашої сторінки досить великий.
Thomas Weller

8

32-розрядний процес все ще обмежений тими ж обмеженнями в 64-розрядної ОС. Проблема полягає в тому, що вказівники пам’яті мають лише 32-бітову ширину, тому програма не може призначити / вирішити будь-яку адресу пам’яті, більшу за 32 біти.


4
Це було б корисно, якби ви дали зрозуміти, що 32 біти адресують 4 ГБ простору.
інженер

4

Один 32-розрядний процес під 64-розрядною ОС обмежений 2 Гб. Але якщо він компілюється в файл EXE з IMAGE_FILE_LARGE_ADDRESS_AWAREвстановленим бітом, тоді має межу 4 Гб, а НЕ 2Gb - см https://msdn.microsoft.com/en-us/library/aa366778(VS.85).aspx

Те, що ви чуєте про спеціальні прапорці завантаження, 3 ГБ, /3GBкомутатори або /uservaвсе стосується 32-розрядних операційних систем, і не стосується 64-розрядної Windows.

Докладніше див. На https://msdn.microsoft.com/en-us/library/aa366778(v=vs.85).aspx .

Що стосується 32-розрядних операційних систем, то, всупереч думці, для 32-розрядних операційних систем не існує фізичного обмеження в 4 Гб. Наприклад, 32-розрядні операційні системи сервера, такі як Microsoft Windows Server 2008 32-розрядні, можуть мати доступ до 64 ГБ(Видання Windows Server 2008 Enterprise та Datacenter) - за допомогою розширення фізичної адреси (PAE), яке вперше було представлено Intel в Pentium Pro, а пізніше AMD в процесорі Athlon - воно визначає ієрархію таблиць сторінок трьох рівнів, із записами таблиці по 64 біти замість 32, що дозволяє цим центральним процесорам отримувати прямий доступ до фізичного адресного простору, що перевищує 4 гігабайти - тому теоретично 32-розрядна ОС може отримати теоретичний доступ до 2 ^ 64 байт, або 17 179 869 168 гігабайт, обмежено 4 ГБ. Однак з маркетингових причин корпорація Майкрософт обмежила максимально доступну пам'ять в несерверних операційних системах лише 4 ГБ, або, навіть, 3 ГБ ефективно. Таким чином, один процес може отримати доступ до понад 4 Гб в 32-розрядної ОС - і приклад - сервер Microsoft SQL.

32-розрядні процеси під 64-розрядною Windows не мають жодних недоліків порівняно з 64-розрядними процесами при використанні віртуального адресного простору спільного ядра (також званий системний простір ). Усі процеси, будь то 64-розрядні чи 32-розрядні, під 64-розрядною Windows мають спільний 64-розрядний системний простір.

Враховуючи той факт, що системний простір є спільним для всіх процесів , у 32-розрядної Windows процеси, які створюють велику кількість дескрипторів (наприклад, потоки, семафори, файли тощо), споживають системний простір об’єктами ядра і можуть закінчити пам’ять навіть якщо у вас загалом доступно багато пам'яті. На відміну від цього, у 64-розрядної Windows простір ядра є 64-розрядною і не обмежений 4 ГБ. Усі системні дзвінки, здійснені 32-розрядними програмами, перетворюються на власні 64-розрядні виклики в користувацькому режимі .


1
Це питання задає питання про те, скільки пам’яті може отримати доступ один процес . Це обмежено 32-розрядним адресним простором віртуальної пам'яті. Звичайно, ви можете мати кілька 32-розрядних процесів, кожен із яких використовує 4 ГБ на одному комп’ютері, навіть із 32-розрядною ОС, що використовує PAE. Але не це питання ставить.
Пітер Кордес,

@PeterCordes - вибачте і дякую - я оновив відповідь щодо обмеження 2 ГБ / 4 ГБ.
Максим Масютін

@PeterCordes, дякую за ваше зауваження, я оновив відповідь, щоб підкреслити, що кілька 32-розрядних процесів можуть використовувати 4 ГБ на одному комп'ютері, навіть із 32-розрядною ОС з використанням PAE, і що 32-розрядні процеси під 64- розрядні ОС не страждають від обмеження системного простору на 2 Гб, що було проблемою при 32-розрядної ОС.
Максим Масютін

-1

Ви отримали однакове основне обмеження під час запуску 32-бітного процесу під Win64. Ваш додаток працює в 32, але підсистемі, яка робить все можливе, щоб виглядати як Win32, і це включатиме обмеження пам’яті для вашого процесу (нижчі 2 ГБ для вас, верхні 2 ГБ для ОС)


-11

Обмеження не становить 2g або 3gb, а його 4gb для 32bit.

Причина, по якій люди думають, що її 3 Гб, полягає в тому, що ОС показує 3 Гб безкоштовно, коли вони дійсно мають 4 Гб оперативної пам'яті.

Його загальна оперативна пам’ять 4 Гб. Отже, якщо у вас є відеокарта розміром 1 Гб, яка враховується як частина загальної оперативної пам'яті, яку переглядає 32-бітна ОС.

4Gig не 3 не 2 зрозумів?


2
Це неправильно. У стандартній системі x86 (без розширень пам’яті) ядро ​​може отримати доступ до повних 4 ГБ пам’яті (навіть якщо комп’ютер має лише 1 ГБ оперативної пам'яті через пейджинг). Ядро резервує верхній 2GiB (деякі ядра резервують 1GiB або 3GiB натомість) для власного використання. У віртуальній пам'яті кожного процесу також відображається зарезервована пам'ять ядра, і тому процес не може використовувати 2 Гб пам'яті.
Алекс Йоргенсон,

3
Крім того, відеокарти не мають нічого спільного з об’ємом пам’яті, яку може використовувати процес. Таблиці ACPI, відображена пам'ять вводу-виводу тощо використовують адреси фізичної пам'яті, але цього вдається уникнути завдяки віртуальній пам'яті.
Alex Jorgenson

1
Це неправильно. Корпорація Майкрософт вирішила (вибір дизайну) розділити віртуальний 32-розрядний адресний простір з Windows NT таким чином, щоб 2 ГБ було зарезервовано для відображення ОС (драйвери / API / системні дзвінки тощо), а 2 ГБ - для використання програми. / 3 Гб перемикач завантаження змінює цю поведінку (1 Гб для відображення ОС, 3 Гб для коду програми). Я залишаю пошук старих документів з архітектури віртуальної пам'яті Windows NT 3.x як вправу для читача :-)
ripvlan
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.