Почему MapViewOfFile не дает сбоя? - PullRequest
2 голосов
/ 30 марта 2011

MSDN говорит:

Если объект сопоставления файлов поддерживается файлом подкачки (CreateFileMapping вызывается с параметром hFile, установленным в INVALID_HANDLE_VALUE), файл подкачки должен быть достаточно большим, чтобы вместить его.все отображение.Если это не так, MapViewOfFile завершается ошибкой .

Но этот код работает, даже если файл подкачки не существует.Зачем?

HANDLE mm;
LPVOID addr;

mm = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE | SEC_COMMIT, 0, 1024 * 1024, NULL);
if (mm != NULL) {
    addr = MapViewOfFile(mm, FILE_MAP_ALL_ACCESS, 0, 0, 1024 * 1024);

    if (addr != NULL) {
        MessageBox(0, NULL, NULL, 0);
    }
}

1 Ответ

2 голосов
/ 30 марта 2011

Ну, а с чего бы это? Страницы, выделенные с помощью VirtualAlloc (), также отображаются в файл подкачки. Это не подводит, вы не могли запустить настоящую программу. В противном случае не возникает проблем при создании MMF, который не поддерживается файлом подкачки, память все равно не может быть отображена, она постоянно застряла в ОЗУ.

Не думайте, что документированные правила остаются в силе, когда вы делаете что-то необычное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...