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