Вы неправильно понимаете, что означает "поддержка" памяти системным файлом подкачки. (Не расстраивайтесь; Рэймонд Чен описал текст, который вы цитировали из MSDN, как « одно из самых неправильно понятых предложений в документации Win32 .»). Почти вся память компьютера «поддерживается» что-то на диске; только «невыгружаемый пул», используемый исключительно ядром и как можно меньшим, не может быть. Если страница не поддерживается обычным именованным файлом, то она поддерживается файлом системного подкачки. Операционная система не будет записывать страницы в системный файл подкачки без необходимости, но может, если потребуется.
Эта архитектура предназначена для того, чтобы гарантировать, что процессы могут быть полностью"выгружены" из ОЗУ, когда им нечего делать. Раньше это было гораздо важнее, чем сейчас, но все же ценно; типичный рабочий стол Windows будет иметь десятки процессов, «бездействующих», ожидающих событий (например, нужных для спулинга задания на печать), которые могут никогда не произойти . Эти процессы могут быть выгружены, а память может использоваться более конструктивно.
CreateFileMapping
с hfile=INVALID_HANDLE_VALUE
на самом деле то, что вы хотите. Пока процессы, совместно использующие память, активно работают с ней, она останется в оперативной памяти и не будет проблем с производительностью. Если они простаивают, да, это может быть выгружено, но это нормально, потому что они ничего с этим не делают.
Вы можете предписывать системе не выгружать кусок памяти; для этого VirtualLock . Но он предназначен для использования с небольшими порциями памяти, содержащими информацию secret , где запись в файл подкачки может привести к утечке секрета. Страница MSDN предупреждает вас, что «Каждая версия Windows имеет ограничение на максимальное количество страниц, которое может заблокировать процесс. Это преднамеренно небольшое ограничение, чтобы избежать серьезного снижения производительности».