Все страницы пользовательского режима могут быть удалены из оперативной памяти.Страницы, которые не модифицируются и поддерживаются реальными данными на диске (такими как исполняемые и доступные только для чтения части DLL и EXE), просто удаляются из памяти и выгружаются обратно по требованию. Все остальные страницы записываются в файл подкачки и обратно по запросу.Это включает в себя стек, кучу и память VirtualAlloc.
Стековая память, близкая к активному потоку, имеет тенденцию не выгружаться из-за недавнего обращения к ней, и, следовательно, это плохой выбор, который должен быть выгруженpaging-daemon / APC, но страницы, находящиеся далеко в стеке вызовов и в потоках, которые часто приостанавливаются , выгружаются системой и, конечно, не закреплены в памяти.
Единственное общееИсключением являются стеки ядра.Каждое ядро должно иметь по крайней мере один стек ядра, который никогда не выгружается, потому что в противном случае сбой страницы вызовет тройной сбой процессора и перезагрузку ядра.
Кроме того, в Linux и Windows есть концепция«non-paged-pool» - куча памяти, которая никогда не будет выгружена.Это отличается от памяти «paged-pool», которая выгружается и выгружается демоном подкачки по мере необходимости.(Эта «невыгружаемая» память требуется для обслуживания самого демона сбоев страниц, основных системных служб и служб, которые необходимы для работы демона подкачки, таких как драйверы файловой системы, диспетчер памяти и т. Д.)