1

Я обычно запускаю пару сотен вкладок в своем браузере (Pale Moon x86), часто увеличивая объем используемой памяти до 2-3 ГБ.

Что происходит, когда программа запускается с ограничением памяти? Система просто продолжает загружать память, но "сейчас" в форме замены диска? Программа "знает", что она достигла системного лимита памяти?

Лишь недавно у меня появилось (упрощенное) представление о том, почему браузер не продолжает увеличивать объем памяти за ее пределами, и начинает пыхтеть с ужасной производительностью - 32/64 битного пространства памяти!

Так что теперь я начал обращаться к Waterfox, варианту x64. Будет ли программа x64 продолжать увеличивать объем используемой памяти, пока система не скажет "больше нет"?

3 ответа3

6

Что происходит, когда 32-разрядная программа (запущенная на 64-разрядной машине) достигает предела памяти?

То же самое происходит в 32-битной системе: программа каким-то образом дает сбой.

Что касается 32-битной программе, то, "Вселенная" состоит до 4 Гбайт данных. Он не знает о большей площади за пределами своей маленькой коробки (вспомните аналогию с рыбой, которую Мичио Каку использует в своей книге « Гиперпространство»).

Если вы откроете слишком много вкладок и увеличите объем используемой памяти, он заполнит юниверс и, когда он закончится, пожалуется, что у него недостаточно памяти, чтобы открыть новую вкладку или отобразить изображение или что-то еще. Ну, он будет жаловаться, если он хорошо написан; если он плохо написан, то просто рухнет.

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

Как аналогия, подумайте о телефонных номерах. Допустим, в вашем городе не так уж много людей, поэтому все ваши телефонные номера состоят из 5 цифр, что позволяет хранить до 10 000 номеров, поэтому во всех ваших адресных книгах до 10 000 мест для телефонных номеров. Однако в стране много людей, поэтому она использует 7-значные числа. Несмотря на то, что страна может дать вам номер человека, находящегося далеко, вы не сможете сохранить его в своей адресной книге, потому что у вас есть только 5 цифр для печати чисел, поэтому после того, как вы напечатали 10000 номеров, книга полностью заполнена.

2

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

2

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

То, что делает процесс при неудачном распределении памяти, зависит от него. Как правило, программа пытается уменьшить использование памяти, выбрасывая все, что ей не нужно, отображая файлы, которые она не использовала, и так далее. Но в конечном итоге ему просто придется отказаться от каких-либо действий.

Некоторые программы реализуют формы подкачки, где они записывают структуры в файл, чтобы позже прочитать их. Они будут оставаться в оперативной памяти все время, но это все равно будет медленнее из-за необходимости манипулирования отображениями.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .