14 記憶體對映檔案

2021-09-03 03:24:52 字數 1381 閱讀 8913

記憶體對映檔案:把乙個硬碟上的檔案,直接對映到物理頁上,然後再把物理頁上的記憶體直接對映到虛擬記憶體中;在虛擬記憶體中操作就直接相當於操作檔案;

記憶體對映檔案示例:

a程式**如下:

/*

*/#ifndef file_system_h

#define file_system_h

#endif

/*

*//*

*通過檔案對映讀寫檔案

*引數:lpcfile檔案路徑

*返回值:1 成功 0 失敗

*/ if (hmapfile == invalid_handle_value)

//3.對映到虛擬記憶體

lpaddr = (lptstr)mapviewoffile(hmapfile,

file_map_all_access, //此引數如果為file_map_copy則可以設定為寫拷貝

0, 0, 0);

if (lpaddr == null)

//4.寫資料

dword dwtest = 0x41414141;

*(pdword)lpaddr = dwtest;

printf("a程序寫入:%x\n", dwtest);

getchar();

//flushviewoffile((pdword)lpaddr, 4);//強制重新整理快取

//5.關閉資源

unmapviewoffile(lpaddr);

closehandle(hmapfile);

closehandle(hfile);

return 1;

}

/*

* a.c

*/int main()

b程式**如下:

/*

*b.c

*/int main()

//2.對映到虛擬記憶體

lpaddr = (lptstr)mapviewoffile(hmapfile, file_map_all_access, 0, 0, 0);

if (lpaddr == null)

//3.讀資料

dword dwtest = *(pdword)lpaddr;

printf("b程序讀出資料:%x\n", dwtest);

//4.關閉資源

unmapviewoffile(lpaddr);

closehandle(hmapfile);

getchar();

return 0;

}

我們先開啟a程序,然後開啟b程序可以看到能讀到資料,且最後關閉程式後檔案中有資料寫入;

記憶體對映檔案

記憶體對映檔案是利用虛擬記憶體把檔案對映到程序的位址空間中去,在此之後程序操作文 件,就像操作程序空間裡的位址一樣了,比如使用 memcpy 等記憶體操作的函式。這種方法能 夠很好的應用在需要頻繁處理乙個檔案或者是乙個大檔案的場合,這種方式處理 io效率比 普通 io效率要高。另外,unix 把它做...

記憶體對映檔案

記憶體對映檔案有三種,第一種是可執行檔案的對映,第二種是資料檔案的對映,第三種是借助頁面交換檔案的記憶體對映.應用程式本身可以使用後兩種記憶體對映.1.可執行檔案對映 windows在執行乙個win32應用程式時使用的是記憶體對映檔案技術.系統先在程序位址空間的0x00400000以上保留乙個足夠大...

記憶體檔案對映

一直都對記憶體對映檔案這個概念很模糊,不知道它和虛擬記憶體有什麼區別,而且對映這個詞也很讓人迷茫,今天終於搞清楚了。下面,我先解釋一下我對對映這個詞的理解,再區分一下幾個容易混淆的概念,之後,什麼是記憶體對映就很明朗了。首先,對映 這個詞,就和數學課上說的 一一對映 是乙個意思,就是建立一種一一對應...