Это потребует небольшого объяснения, поэтому придерживайтесь меня здесь.
Прежде всего, эта тема представляет собой запутанную трясину противоречивых терминов, поэтому, пожалуйста, выбросьте все понятия, которые у вас есть «виртуальная память», что-то общее с дисками.
- Физическая память - это память, хранящаяся на физическом устройстве. Это, как правило, относится к системной памяти, но также может быть дисковыми буферами, NIC буферов, видеокарта VRAM и т.п.
- Виртуальная память представляет собой набор физических диапазонов адресов, отображенных в пользовательском режим (виртуальные) диапазоны адресов, так что доступ к памяти может быть обеспечен безопасным и раздельным образом.
Быстрое примечание о почему мы делаем это: если мы дали процессы прямые адреса памяти, мы могли бы только (посильнее) есть один магазин памяти. Это неудобно и плохо для производительности. Когда виртуальный адрес преобразуется в физический адрес вне диапазона системной памяти (ОЗУ), процессор выдает ошибку страницы. Это сигнализирует обработчик прерываний в ОС, который затем может делегировать операцию доступа к памяти на другое устройство. Полезно!
В 32-битной системе Windows максимальный объем виртуальной памяти, который может обрабатывать процесс в любой момент времени составляет 2 ГБ. Это можно увеличить до 3 ГБ, используя AWE, или 4 ГБ с /4GT
и AWE. Это не означает, что процесс может только выделять 2 ГБ (или 3 ГБ/4 ГБ в зависимости от ранее обсуждавшихся настроек) памяти. Это просто означает, что он не может иметь одновременный доступ к большему, чем это.
Например, если вы открываете файл с памятью размером 1 ГБ, использование вашей виртуальной памяти увеличится на 1 ГБ. Вы не касаетесь ОЗУ и диска, но вы выделили блок виртуального адресного пространства для своего процесса. Если тогда вы захотите выделить 1,1 ГБ ОЗУ одновременно с наличием этого файла с отображением памяти, вы не сможете. Сначала вы должны отменить файл из своего процесса. Помните, что память все еще может быть выделена и заполнена данными, но на самом деле не отображена в вашем процессе. Если на вашем компьютере имеется 8 ГБ оперативной памяти, вы можете заполнить 6 ГБ данными и отобразить 2 ГБ в свой процесс. Когда вам нужно использовать другой раздел этой памяти, вы должны разблокировать существующий блок и отобразить другой раздел.
Таким образом, на разницу вы видите:
Частные байт показывает, сколько байт памяти виртуального устройства ваш процесс отображенные, за исключением виртуальной памяти, разделяемой с другими процессами (например, файлы, отображенные, глобальные куча и т. д.).
Рабочий набор сообщает вам, сколько байт физической памяти вы активно используете. Это включает в себя физическую память, буферы устройств и сопоставленные файлы. Это довольно странная фигура, так как она приравнивается к затрагиваемой физической памяти + отображаемой виртуальной несистемной памяти. В общем, вы должны полностью игнорировать эту цифру. Это практически бесполезно для отладки утечек памяти.
Виртуальные байты - это общее количество виртуальной памяти, которую вы сопоставили.
Разница заключается в том, что вы сопоставили общий объем виртуальной памяти, например, кучу DLL-файлов или блок глобальной кучи, в процесс. Разница указывает, что общий размер этих общих сопоставлений составляет примерно 1 ГБ.
Имейте в виду, что ни это имеет ничего делать с свопинга, что передача страниц системной памяти на диск (так называемый «Pagefile»), чтобы увеличить доступность быстро системных ресурсов (ОЗУ). Именование этого файла не закончило путаницы в этой области Windows, и я буду в восторге, когда Microsoft, наконец, решит назвать его «своп», а не «виртуальной памятью» или «файлом страницы».
Возможно, у вас есть один или несколько утечек памяти, которые необходимо устранить? –
Committed = память фактически используется приложением, private = память зарезервирована специально для приложения? И виртуальный размер = количество данных, выгружаемых на диск, я думаю. Я должен был бы вникать в это, чтобы точно знать. – JAB
@JAB Это неверно. Я напишу ответ, объясняющий. – Polynomial