映射文件把虛擬可尋址空間映射到文件上。整個文件就可以很容易的訪問,就像它在內(nèi)存中一樣。但是它實質(zhì)還是在硬盤中,只是需要的時候載入需要的部分到內(nèi)存,這樣可以節(jié)約物理內(nèi)存的使用。windows 使用 這個來加載EXE和DLL,所以這個因該是高效的。windows下默認(rèn)的虛擬內(nèi)存頁最小是512KB,所以對512KB以下的文件使用就是多余的低效的。
按照以下步驟使用
1. 調(diào)用CreateFile打開您想要映射的文件。
2. 調(diào)用CreateFileMapping,其中要求傳入先前CreateFile返回的句柄,該函數(shù)生成一個建立在CreateFile函數(shù)創(chuàng)建的文件對象基礎(chǔ)上的內(nèi)存映射對象。
3. 調(diào)用MapViewOfFile函數(shù)映射整個文件的一個區(qū)域或者整個文件到內(nèi)存。該函數(shù)返回指向映射到內(nèi)存的第一個字節(jié)的指針。
4. 用該指針來讀寫文件。
5. 調(diào)用UnmapViewOfFile來解除文件映射。
6. 調(diào)用CloseHandle來關(guān)閉內(nèi)存映射文件。注意必須傳入內(nèi)存映射文件的句柄。
7. 調(diào)用CloseHandle來關(guān)閉文件。注意必須傳入由CreateFile創(chuàng)建的文件的句柄。
/////////////////////////////////////////////
//為了簡單 省略錯誤檢查
//建一個test.txt的文本文件做實驗
//這里只演示讀取操作
//win32 console 程序
//winXP+vc6
//write by DKink|棼紫
//2007.10.09
#include "stdafx.h"
#include
#include
int main(int argc, char* argv[])
{
TCHAR *fileName =_T("test.txt");
//--------------------------------------
//打開文件
HANDLE fileHandle = CreateFile(
fileName,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,//文件必須存在
0,
NULL);
//--------------------------------------
//從文件創(chuàng)建映射對象
HANDLE fileMapping = CreateFileMapping(
fileHandle,
NULL,
PAGE_READONLY,
0,
0,
NULL);
//---------------------------------------
//把文件映射到指針(為什么用char,因為這個大小是一個Byte)
char *fileBase = (char *) MapViewOfFile(
fileMapping,
FILE_MAP_READ,
0,
0,
0);
//---------------------------------------
//使用數(shù)據(jù)
MessageBox(NULL,fileBase,"MTest",MB_OK);//這句可能有溢出,正常情況誤用。
UnmapViewOfFile(fileBase);//解除文件映射
CloseHandle(fileMapping);//關(guān)閉內(nèi)存映射文件
CloseHandle(fileHandle);//關(guān)閉文件
return 0;
}
按照以下步驟使用
1. 調(diào)用CreateFile打開您想要映射的文件。
2. 調(diào)用CreateFileMapping,其中要求傳入先前CreateFile返回的句柄,該函數(shù)生成一個建立在CreateFile函數(shù)創(chuàng)建的文件對象基礎(chǔ)上的內(nèi)存映射對象。
3. 調(diào)用MapViewOfFile函數(shù)映射整個文件的一個區(qū)域或者整個文件到內(nèi)存。該函數(shù)返回指向映射到內(nèi)存的第一個字節(jié)的指針。
4. 用該指針來讀寫文件。
5. 調(diào)用UnmapViewOfFile來解除文件映射。
6. 調(diào)用CloseHandle來關(guān)閉內(nèi)存映射文件。注意必須傳入內(nèi)存映射文件的句柄。
7. 調(diào)用CloseHandle來關(guān)閉文件。注意必須傳入由CreateFile創(chuàng)建的文件的句柄。
/////////////////////////////////////////////
//為了簡單 省略錯誤檢查
//建一個test.txt的文本文件做實驗
//這里只演示讀取操作
//win32 console 程序
//winXP+vc6
//write by DKink|棼紫
//2007.10.09
#include "stdafx.h"
#include
#include
int main(int argc, char* argv[])
{
TCHAR *fileName =_T("test.txt");
//--------------------------------------
//打開文件
HANDLE fileHandle = CreateFile(
fileName,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,//文件必須存在
0,
NULL);
//--------------------------------------
//從文件創(chuàng)建映射對象
HANDLE fileMapping = CreateFileMapping(
fileHandle,
NULL,
PAGE_READONLY,
0,
0,
NULL);
//---------------------------------------
//把文件映射到指針(為什么用char,因為這個大小是一個Byte)
char *fileBase = (char *) MapViewOfFile(
fileMapping,
FILE_MAP_READ,
0,
0,
0);
//---------------------------------------
//使用數(shù)據(jù)
MessageBox(NULL,fileBase,"MTest",MB_OK);//這句可能有溢出,正常情況誤用。
UnmapViewOfFile(fileBase);//解除文件映射
CloseHandle(fileMapping);//關(guān)閉內(nèi)存映射文件
CloseHandle(fileHandle);//關(guān)閉文件
return 0;
}