То, что вы описываете, правильно.В 64-битной ОС вы можете отобразить 1 ТБ адресного пространства в файл и позволить ОС управлять чтением и записью в файл.
Вы не упомянули, на какой архитектуре процессора вы работаете, но большинство из них (включая amd64) ЦП поддерживает бит в каждой записи таблицы страниц относительно того, были ли записаны данные на странице.ОС действительно может использовать этот флаг, чтобы избежать записи страниц, которые не были изменены обратно на диск.
Не будет увеличения ввода-вывода только потому, что отображение большое.Объем данных, к которым вы действительно обращаетесь, определит это.Большинство ОС, включая Linux и Windows, имеют унифицированную модель кэширования страниц, в которой блоки кэширования используют те же физические страницы памяти, что и страницы с отображением в памяти.Я бы не ожидал, что ОС будет использовать больше памяти с отображением памяти, чем с кэшированным вводом-выводом.Вы просто получаете прямой доступ к кэшированным страницам.
Одна из проблем, с которой вы можете столкнуться, - это сброс измененных данных на диск.Я не уверен, какая политика конкретно для вашей ОС, но время между изменением страницы и моментом, когда ОС фактически запишет эти данные на диск, может быть намного больше, чем вы ожидаете.Используйте API сброса, чтобы принудительно записать данные на диск, если важно, чтобы они были записаны к определенному времени.
В прошлом я не использовал такие сопоставления файлов, но я ожидал, что ониработать хорошо и, по крайней мере, стоит попробовать.