檔案對映記憶體

2021-07-22 10:31:11 字數 2033 閱讀 5940

檔案記憶體對映,也可以做為程序通訊的一種方式,共享一片對映的空間,即可以達到共享資料的要求。

/* 

檔案對映記憶體

虛擬記憶體:把乙個檔案當做記憶體使用。如果系統檔案中 pagefile.sys,作業系統把這個檔案當做記憶體來操作

這個是技術是把檔案對映成記憶體。

使用景場:如果乙個檔案很大,而所使用的電腦記憶體又不夠,這時就可以使用此技術,把檔案當成記憶體來

操作。通過檔案控制代碼獲得檔案路徑。

空間,程序可以通過view來訪問檔案的內容,檢視是一段記憶體,可以使用指標來操作檢視。使用的檔案映

射之後,讀寫檔案就如同對讀寫記憶體一樣簡單。在使用檔案對映時需要建立對映物件,對映物件分為命名

的和未命名的。對映物件還訪問許可權。

使用檔案對映至少有3個好處,一是因為檔案是儲存於硬碟上的,而檔案檢視是一段記憶體,使用檔案對映操

作時更方便;二是效率更高;三是可以在不同的程序間共享資料。

*/#define _crt_secure_no_warnings

#include#include#include#includechar path[1024] = "d:\\demo.txt";

void main()

printf("檔案大小是:%d\n", getfilesize(hfile, null));

null,

page_readwrite | sec_commit,//讀寫,立即提交。輸入引數,記憶體保護屬

0,//輸入引數,對映大小的最大值的高32位。

getfilesize(hfile, null) + 1,//輸入引數,對映大小的最大值的低32位。

null);//輸入引數,對映物件名,可以是null。

//判斷物件是否建立成功

if (hmap == null)

//返回lpvoid值,指向對映的記憶體值,如果為null表示錯誤

//即把指標指向上面建立記憶體對映的首位址。

lpvoid pvfile = mapviewoffile(hmap,

file_map_read|file_map_write,//,訪問類別,可以是file_map_write. file_map_read. file_map_copy, file_map_execute中的一種。

0, //輸入引數,對映的檔案偏移的高32位。

0, //輸入引數,對映的檔案偏移的低32位。

0);//輸入引數,對映到view的位元組數

if (pvfile == null)

puts("對映成功!\n");

char *pstart = pvfile; //首位址

char *pend = pstart + getfilesize(hfile,null); //結束位址

system("pause");

//讀出出對映記憶體的內容

printf("\n開始讀取對映記憶體的內容...\n");

for (int i = 0; i < 1000; i++)

//向這片記憶體寫入

char str[156] = "c語言檔案對映記憶體事例!";

//寫入時要注意一點是,當檔案對映成記憶體時,是有空間限制的,比如你的檔案是1mb,這時

//你要把寫的記憶體指標移到檔案尾部這時寫入,就會出錯。比如這時的指標到了pend,而這時

//寫入資料,就會出錯。因為這個不屬於對映的範圍了。

printf("\n開始向對映檔案中寫入資料...\n");

/*strcpy(pstart, str);*/

//下面這樣是寫不到資料進記憶體的。檢視檔案是沒有資料被寫入,因為這時他已超過被對映的範圍。

char *p = strcpy(pend, str);

if (p == null)

else

system("pause");

unmapviewoffile(pvfile);

closehandle(hmap);

closehandle(hfile);

system("pause");

}

記憶體對映檔案

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

記憶體對映檔案

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

記憶體檔案對映

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