Вы не можете вычеркнуть это, но то, что вы действительно хотите, это не вычеркнуть его ...
Что вы действительно хотите - это освободить страницу из памяти. Это можно сделать с помощью VirtualUnlock. См. Замечания VirtualUnlock :
Вызов VirtualUnlock для диапазона памяти, который не заблокирован, освобождает страницы из рабочего набора процесса.
Примечание: как задокументировано, функция вернет FALSE (страница не была заблокирована), а GetLastError вернет ERROR_NOT_LOCKED.
Это описано в вопрос Гильермо Пранди CreateFileMapping, MapViewOfFile, как избежать удержания системной памяти .
Замечания: я думаю, что вы можете посмотреть на это следующим образом: вычеркнуть отображенную страницу - нонсенс - страницы фиксируются всякий раз, когда они поддерживаются физическим хранилищем, будь то память или файл. Страница сопоставленного файла не может быть распакована в этом смысле, так как она всегда будет поддерживаться файлом.
Однако код в упомянутом вопросе измеряет объем памяти, но то, что измеряет, не является репрезентативным, поскольку тот факт, что страница удалена из рабочего набора процесса, не обязательно означает, что она не дольше присутствует в памяти.
Я провел другой эксперимент, измеряя, сколько времени занимает чтение байта со страницы с отображенной памятью. После разблокирования страницы или отмены отображения представления и закрытия маркера доступа доступ по-прежнему был быстрым.
Для того, чтобы доступ был медленным (т. Е. Чтобы действительно удалить страницу из памяти), необходимо было отключить отображение вида и закрыть ОБА и дескриптор отображения памяти и дескриптор файла (последнее меня удивило, так как я ожидал, что отображение не будет отображаться и закрытия ручки сопоставления будет достаточно).
По-прежнему возможно, что система примет VirtualUnlocked как подсказку, и она откажется от страниц раньше, как только ей нужно что-то отбросить, но я должен еще об этом подумать, как доказать.