1

Я читал много о фиксации заряда и что - то все еще давало мне покоя. На моем mac (и, вероятно, на linux), какова связь между размером виртуальной машины и коммитом памяти (windows). Я думаю, что я полностью понимаю commit после некоторого тестирования, но в Windows не кажется, что объем виртуальной памяти когда-либо превышает пространство подкачки + оперативная память. В OSX (и Linux) размер виртуальной машины почти превышает размер моего жесткого диска! Я предполагаю, что он либо включает общую память более одного раза, либо включает выделенную, но нетронутую или записанную в память. Допустим, я делаю malloc (2 ГБ) (очевидно, не так), отличается от фактической записи всего 2 ГБ.

Таким образом, это подводит меня к моему вопросу, что именно измеряет размер виртуальной машины в OSX и Linux. Это, например, сумма всех вызовов malloc (или общего количества возможных виртуальных машин, включая практически 4 ГБ для каждого процесса на 64-битной машине), и как это соотносится с Commit (limit, peak, use) в Windows? Разве Windows не позволяет вам выделять больше, чем ваш предел swap + ram, как OSX и Linux и почему?

На изображениях ниже вы можете видеть, что в windows swap + ram равно commit (2gb). В OSX размер моей виртуальной машины составляет более 200 ГБ на жестком диске около 200 ГБ.

Диспетчер задач Windows, показывающий 2gb commit max (я думаю)

Панель управления Windows показывает 1024 МБ 1(ГБ) подкачки плюс 1(ГБ) оперативной памяти

Диспетчер процессов OSX показывает размер виртуальной машины более 200 ГБ

1 ответ1

2

Размер виртуальной машины - это общий объем адресного пространства, используемого процессом. Ни операционная система позволяет вам более доступную оперативную память + своп с поддерживаемой VM, но вы можете с необеспеченными VM. По сути, размер виртуальной машины (особенно в 64-битных операционных системах) является бессмысленным измерением. Виртуальная память без резервной копии (виртуальная память, которая не требует и не может требовать оперативной памяти или подкачки), по существу, свободна, поэтому нет смысла беспокоиться о том, сколько ее используется.

В 64-разрядной операционной системе вы можете открыть файл размером 2 ГБ только для чтения и отобразить весь файл в адресное пространство вашего процесса. Это "потребляет" 2 ГБ виртуальной машины, но на самом деле не требует каких-либо значительных ресурсов. А поскольку это отображение только для чтения, оно никогда не требует замены.

Коммит за фиксацию измеряет поддерживаемую виртуальную память, то есть виртуальную память, которая может в конечном итоге привести к потреблению физической памяти или пространства подкачки / подкачки. Операционная система понятия не имеет, какая часть этой памяти в конечном итоге потребует резервного копирования, поэтому обычно она не позволяет выделять больше, чем RAM+swap. (Насколько я знаю, ни Windows, ни OSX не допускают чрезмерную загрузку резервной виртуальной памяти. Linux делает.)

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