2
如果一个文件映射对象由分页文件(的CreateFileMapping调用与设置为INVALID_HANDLE_VALUE的HFILE参数)的支持下,分页文件必须大到足以容纳整个映射。如果不是,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);
}
}
你是如何删除页面文件的? – 2011-03-30 11:02:51
该代码看起来应该明确地不_在没有页面文件的系统上显示一个消息框(只是为了确定,你说的是_does_显示消息框?)。鉴于SEC_COMMIT,操作系统必须确保内存实际上存在(不仅在理论上与SEC_RESERVE中一样),我没有看到没有页面文件的情况下它是如何实现的,除非将整个内存锁定为非内存可以分页,这当然不会。 – Damon 2011-03-30 11:05:29
显然你错了,系统仍然有一个页面文件要解决,否则调用就会失败。 – 2011-03-30 13:32:52