В поисках утечки памяти я недавно заметил, что значение виртуальной памяти, сообщаемое Process Explorer (procexp.exe от Microsoft/Sysinternals v16.26), очень велико — около 2,1 ТБ, тогда как мой ноутбук имеет 32 ГБ ОЗУ под управлением Win 10Pro X64. Например, здесь сообщается, что размер виртуальной памяти процесса Chrome.exe составляет 2 151 819 136 КБ. Любая идея, что может быть причиной этого?
Необоснованно большой размер виртуальной памяти процесса, о котором сообщает Process Explorer
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
Как это влияет на процессы, работающие на Mono в Linux? Я видел процессы, которые были убиты из-за чрезмерного использования виртуальной памяти.
- person Martin; 02.09.2020
Это не должно влиять на Mono в Linux, поскольку это чисто артефакт поведения ОС, который не означает, что используется больше виртуальной памяти (кроме размера таблицы памяти), используются только более высокие адреса.
- person Dror Harari; 04.09.2020