logo search
Ответы_ОСиСП

16. Отображение файлов в память.

Самый главный вопрос - это зачем нужно отображать файлы на память? Ведь есть виртуальная память до 2 ГБ. Одна из причин это обеспечение работы с файлами большего размера. Второе преимущество при работе с большими файлами, что память не выделяется, а резервируется и при обращении к ней происходит подгрузка из файла. Этот механизм используется операционной системой, например, при работе с DLL. Общий набор функций по работе с отображаемыми файлами представлен на диаграмме.

Сначала файл открывается с помощью CreateFile(), и если открытие прошло успешно, то идентификатором файла можно воспользоваться для создания отображенного файла CreateFileMapping(),после которой мы получим идентификатор отраженного файла, на основе которого мы можем проецировать файл в память с помощью функции MapViewOfFile(). Эта функция даст нам указатель LPVOID, который используется для последующих операций, в том числе и по отмене проецированного файла UnmapViewOfFile() или принудительной записи на диск FlushViewOfFile(). В том случае, если с отображенным файлом будут работать несколько приложений одно приложение создает файл проецированный на память CreateFileMaping(), а остальные открывают эту проекцию OpenFileMapping().