使用記憶體對映檔案處理大檔案示例

2021-08-14 08:58:08 字數 923 閱讀 9029

前面我們講過記憶體對映檔案的使用,但是,如果檔案大小超過記憶體大小那怎麼辦呢

其實,我們在把記憶體對映檔案對映到程序的位址空間時,可以對映一部分,通過乙個迴圈,把整個檔案處理完

下面我舉個例子

#include 

#include

#include

using

namespace

std;

__int64 count0s();

int main()

__int64 count0s()

//建立檔案對映物件

if(hfilemap==null)

//獲取檔案大小

dword filesizehigh,filesizelow;

filesizelow=getfilesize(hfile,&filesizehigh);

//在這裡如果想要獲取超過4gb檔案的大小

__int64 filesize=filesizelow+(filesizehigh<<32);

closehandle(hfile);

__int64 fileoffset=0,numof0s=0;

dword dwbytesinblock;

while(filesize>0)

}unmapviewoffile(pbfile);

fileoffset+=dwbytesinblock;

filesize-=dwbytesinblock;

}closehandle(hfilemap);

return numof0s;

}

這裡需要注意的是檔案的位移一定需要是分配粒度的倍數,所以,當所剩的大小大於分配粒度時 dwbytesinblock等於分配粒度,否則等於檔案剩下的大小

測試結果:

4796

大檔案處理 記憶體檔案對映

記憶體對映檔案,是由乙個檔案到一塊記憶體的對映。與虛擬記憶體有些類似,通過記憶體對映檔案可以保留乙個位址空間的區域,同時將物理儲存器提交給此區域,記憶體檔案對映的物理儲存器來自乙個已經存在的磁碟上的檔案,而且在對該檔案進行操作之前必須首先對檔案進行對映。另外,記憶體對映檔案是由乙個檔案到程序位址空間...

記憶體對映檔案機制處理大檔案

原文 hongchangfirst hongchangfirst的主頁 先說結論 使用記憶體對映檔案來處理大檔案可以提高效率。為什麼呢?我們先來看看如果不使用記憶體對映檔案的處理流程是怎樣的,首先我們得先讀出磁碟檔案的內容到記憶體中,然後修改,最後回寫到磁碟上。第一步讀磁碟檔案是要經過一次系統呼叫的...

VC 中使用記憶體對映檔案處理大檔案

vc 中使用記憶體對映檔案處理大檔案 摘要 本文給出了一種方便實用的解決大檔案的讀取 儲存等處理的方法,並結合相關程式 對具體的實現過程進行了介紹。引言 檔案操作是應用程式最為基本的功能之一,win32 api和mfc均提供有支援檔案處理的函式和類,常用的有win32 api的createfile ...