Необоснованно большой размер виртуальной памяти процесса, о котором сообщает Process Explorer

В поисках утечки памяти я недавно заметил, что значение виртуальной памяти, сообщаемое Process Explorer (procexp.exe от Microsoft/Sysinternals v16.26), очень велико — около 2,1 ТБ, тогда как мой ноутбук имеет 32 ГБ ОЗУ под управлением Win 10Pro X64. Например, здесь сообщается, что размер виртуальной памяти процесса Chrome.exe составляет 2 151 819 136 КБ. Любая идея, что может быть причиной этого?

введите описание изображения здесь


person Dror Harari    schedule 05.07.2019    source источник
comment
Это ожидаемый побочный эффект программ, компилируемых с Control Охранник потока.   -  person that other guy    schedule 06.07.2019


Ответы (1)


Спасибо тому-другому за подсказку.

Как объясняет Алекс Ионеску в своем посте (Как Control Flow Guard радикально изменил адресное пространство и поведение Windows 8.1), ASLR с высокой энтропией (HEASLR), рандомизация сверху вниз и рандомизация анонимной памяти приводят к использованию старшего виртуального адреса, и поэтому виртуальное адресное пространство процесса колеблется около 2 ТБ.

На рисунке ниже из сообщения Алекса показано, что все программы, созданные с помощью /CFG, имеют размер виртуальной памяти 2 ТБ:

введите здесь описание изображения

person Dror Harari    schedule 07.07.2019
comment
Как это влияет на процессы, работающие на Mono в Linux? Я видел процессы, которые были убиты из-за чрезмерного использования виртуальной памяти. - person Martin; 02.09.2020
comment
Это не должно влиять на Mono в Linux, поскольку это чисто артефакт поведения ОС, который не означает, что используется больше виртуальной памяти (кроме размера таблицы памяти), используются только более высокие адреса. - person Dror Harari; 04.09.2020