Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
3 семестр, WinAPI, MFC.pdf
Скачиваний:
370
Добавлен:
15.06.2014
Размер:
6.17 Mб
Скачать

Многие программы при выполнении создают данные, которые им нужно разделять с другими процессами. А создавать файл на диске и хранить там данные только с этой целью очень неудобно, поэтому есть возможность проецирования файлов непосредственно на физическую память из страничного файла.

Достоинство: не надо вызывать CreateFile, так как создавать или открывать специальный файл не требуется. Вызывается CreateFileMapping и передается INVALID_HANDLE_VALUE в параметре hFile, указывается, что следует выделить физическую память из страничного файла. Объем выделяемой памяти определяется параметрами dwMaximumStzeHigh и dwMaximumSizeLow.

Создав объект "проекция файла" и спроецировав его представление на адресное пространство своего процесса, его можно использовать так же, как и любой другой регион памяти.

Частичная передача физической памяти проецируемым файлам

Для передачи физической памяти общему (совместно используемому) региону, - надо вызвать функцию VirtualAlloc:

PVOID VirtualAlloc( PVOID pvAddress, SIZE_T dwSize, DWORD fdwAllocationType, DWORD friwProtect);

Вызвать VirtualAlloc для передачи физической памяти представлению региона — то же самое, что вызвать VirtualAlloc для передачи памяти региону, ранее зарезервированному вызовом VirtualAlloc с флагом MEM_RESERVE. Получается, что региону, зарезервированному функциями MapViewOfFile или MapViewOfFileEx, — как и региону, зарезервированному функцией VirtualAlloc, — тоже можно передавать физическую память порциями, а не всю сразу.

Флаг SEC_RESERVE и функция VirtualAlloc позволяют эффективнее использовать память.

Контрольные вопросы

1.Для чего требуются файлы, проецируемые в память?

2.Каково применение файлов, проецируемых в память?

3.Как проецируются в память EXE- и DLL файлы?

4.Рассказать про статистические данные, которые могут не разделяться несколькими экземплярами EXE или DLL.

5.Рассказать про статистические данные, которые могут разделяться несколькими экземплярами EXE или DLL.

6.Каковы методы проецирования файлов в память? Рассказать о каждом.

7.Какие функции нужны при использовании проецируемых в память файлов?

8.Как происходит конец работы с проецируемым в память файлом?

9.Что такое совместный доступ процессов к данным и как он проходит?

10.Благодаря какой функции возможна частичная передача физической памяти проецируемым файлам?