Когда процессу Windows не хватает памяти? - PullRequest
2 голосов
/ 14 октября 2008

В Windows Server 2003, Enterprise Edition, SP2 (переключатель / 3GB не включен)

Насколько я понимаю, и я могу ошибаться, максимальная адресуемая память для процесса составляет 4 ГБ.

Это 2 ГБ приватных байтов и 2 ГБ виртуальных байтов?

Получаете ли вы ошибки "нехватки памяти" при достижении ограничения частного или виртуального байта?

Ответы [ 6 ]

4 голосов
/ 14 октября 2008

Правильно, что в некотором смысле максимальное адресное пространство процесса составляет 4 ГБ. Половина адресного пространства, для каждого процесса, занята операционной системой. Это можно изменить с помощью переключателя 3 ГБ, но это может вызвать нестабильность системы. Таким образом, у нас осталось 2 ГБ адресуемой памяти для самостоятельного использования процессом. Ну, не совсем. Оказывается, что часть этого пространства занята другими вещами, такими как DLL, другой распространенный код. Фактическая память, доступная вам как программисту, составляет около 1,5 ГБ - 1,7 ГБ.

Я не уверен, как вы можете справиться со случайным превышением этого предела, но я знаю игры, которые по этой причине вылетают в больших многопользовательских картах. Следует также отметить, что 32-разрядная программа не может использовать более 2 ГБ адресного пространства в 64-разрядной системе, если только они не включают флаг компоновщика / LARGEADDRESSAWARE: YES.

0 голосов
/ 14 октября 2008

Максимальная адресуемая память для 32-битной машины составляет 4 ГБ, для 64-битной машины вы можете адресовать больше нагрузок. (Хотя некоторые 32-битные машины имеют системы расширения для доступа к большему количеству, но я не думаю, что это стоит беспокоиться или рассматривать для использования).

Вы получаете ошибки памяти, когда виртуальный лимит достигнут. В Windows Server 2003 диспетчер задач сообщает об ограничении на вкладке производительности, помеченной как «Ограничение обязательной оплаты».

0 голосов
/ 14 октября 2008

В 32 битах, если физической виртуальной памяти и дискового пространства достаточно для виртуальной памяти, объем памяти заканчивается около 3 ГБ, поскольку ядро ​​резервирует для себя адресное пространство выше 0xC0000000. В 64-битном ядре, работающем с 64-битным приложением, ограничение составляет 8 ТБ.

Для получения более подробной информации, ознакомьтесь с MSDN - Ограничения памяти для выпусков Windows

0 голосов
/ 14 октября 2008

Вы можете получить доступ только к 2 ГБ памяти (без переключателя 3Gb) на 32-битных платформах Windows.

Вы можете запустить несколько 32-битных виртуальных машин в 64-битной ОС, чтобы у каждого приложения был доступ к как можно большему количеству памяти, если ваша машина имеет более 4 ГБ.

Многие люди только начинают преодолевать эти барьеры, я думаю, легче, если ваше приложение работает в .net или Java, поскольку виртуальные машины с удовольствием занимают 32 ГБ памяти на 64-битной ОС.

0 голосов
/ 14 октября 2008

Марк Руссинович начал серию постов на эту тему .. Расширение границ Windows: физическая память

Хотя 4 ГБ - это лицензионный лимит для 32-разрядных клиентских SKU, эффективный лимит на самом деле ниже и зависит от чипсета системы и подключенных устройств. Причина в том, что карта физических адресов включает в себя не только ОЗУ, но и память устройства, а системы x86 и x64 отображают всю память устройства ниже границы адреса 4 ГБ, чтобы оставаться совместимыми с 32-разрядными операционными системами, которые не знают, как обращаться адреса больше 4ГБ. Если система имеет 4 ГБ ОЗУ и устройства, такие как видео, аудио и сетевые адаптеры, которые внедряют окна в память своих устройств объемом до 500 МБ, 500 МБ из 4 ГБ ОЗУ будут находиться за границей адреса 4 ГБ.

0 голосов
/ 14 октября 2008

Следующая ссылка объясняет это намного лучше, чем я мог:

MSDN - CLR Inside Out: исследование проблем с памятью

...