为什么MapViewOfFile不会失败?

时间:2011-03-30 10:52:57

标签: winapi

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 个答案:

答案 0 :(得分:2)

嗯,为什么会失败?使用VirtualAlloc()分配的页面也会映射到页面文件。这不会失败,你无法启动任何真正的程序。创建没有页面文件支持的MMF没有问题,无论如何内存都无法取消映射,它永久地卡在RAM中。

当你做一些不寻常的事情时,不要认为记录的规则仍然有效。