您的位置: 旅游網(wǎng) > 綜藝 >> 湖南

    中用內(nèi)存映射文件處理大文件計(jì)劃

    發(fā)布時(shí)間:2021-10-28 05:38:52

    引言

    文件操作是應(yīng)用程序最為基本的功能之一,Win32 API和MFC均提供有支持文件處理的函數(shù)和類(lèi),常用的有Win32 API的CreateFile()、WriteFile()、ReadFile()和MFC提供的CFile類(lèi)等。一般來(lái)說(shuō),以上這些函數(shù)可以滿足大多數(shù)場(chǎng)合的要求,但是對(duì)于某些特殊應(yīng)用領(lǐng)域所需要的動(dòng)輒幾十GB、幾百GB、乃至幾TB的海量存儲(chǔ),再以通常的文件處理方法進(jìn)行處理顯然是行不通的。目前,對(duì)于上述這種大文件的操作一般是以?xún)?nèi)存映射文件的方式來(lái)加以處理的,本文下面將針對(duì)這種Windows核心編程技術(shù)展開(kāi)討論。

    內(nèi)存映射文件概述

    內(nèi)存文件映射也是Windows的一種內(nèi)存管理方法,提供了一個(gè)統(tǒng)一的內(nèi)存管理特征,使應(yīng)用程序可以通過(guò)內(nèi)存指針對(duì)磁盤(pán)上的文件進(jìn)行訪問(wèn),其過(guò)程就如同對(duì)加載了文件的內(nèi)存的訪問(wèn)。通過(guò)文件映射這種使磁盤(pán)文件的全部或部分內(nèi)容與進(jìn)程虛擬地址空間的某個(gè)區(qū)域建立映射關(guān)聯(lián)的能力,可以直接對(duì)被映射的文件進(jìn)行訪問(wèn),而不必執(zhí)行文件I/O操作也無(wú)需對(duì)文件內(nèi)容進(jìn)行緩沖處理。內(nèi)存文件映射的這種特性是非常適合于用來(lái)管理大尺寸文件的。

    在使用內(nèi)存映射文件進(jìn)行I/O處理時(shí),系統(tǒng)對(duì)數(shù)據(jù)的傳輸按頁(yè)面來(lái)進(jìn)行。至于內(nèi)部的所有內(nèi)存頁(yè)面則是由虛擬內(nèi)存管理器來(lái)負(fù)責(zé)管理,由其來(lái)決定內(nèi)存頁(yè)面何時(shí)被分頁(yè)到磁盤(pán),哪些頁(yè)面應(yīng)該被釋放以便為其它進(jìn)程提供空閑空間,以及每個(gè)進(jìn)程可以擁有超出實(shí)際分配物理內(nèi)存之外的多少個(gè)頁(yè)面空間等等。由于虛擬內(nèi)存管理器是以一種統(tǒng)一的方式來(lái)處理所有磁盤(pán)I/O的(以頁(yè)面為單位對(duì)內(nèi)存數(shù)據(jù)進(jìn)行讀寫(xiě)),因此這種優(yōu)化使其有能力以足夠快的速度來(lái)處理內(nèi)存操作。

    使用內(nèi)存映射文件時(shí)所進(jìn)行的任何實(shí)際I/O交互都是在內(nèi)存中進(jìn)行并以標(biāo)準(zhǔn)的內(nèi)存地址形式來(lái)訪問(wèn)。磁盤(pán)的周期性分頁(yè)也是由操作系統(tǒng)在后臺(tái)隱蔽實(shí)現(xiàn)的,對(duì)應(yīng)用程序而言是完全透明的。內(nèi)存映射文件的這種特性在進(jìn)行大文件的磁盤(pán)事務(wù)操作時(shí)將獲得很高的效益。

    需要說(shuō)明的是,在系統(tǒng)的正常的分頁(yè)操作過(guò)程中,內(nèi)存映射文件并非一成不變的,它將被定期更新。如果系統(tǒng)要使用的頁(yè)面目前正被某個(gè)內(nèi)存映射文件所占用,系統(tǒng)將釋放此頁(yè)面,如果頁(yè)面數(shù)據(jù)尚未保存,系統(tǒng)將在釋放頁(yè)面之前自動(dòng)完成頁(yè)面數(shù)據(jù)到磁盤(pán)的寫(xiě)入。

    對(duì)于使用頁(yè)虛擬存儲(chǔ)管理的Windows操作系統(tǒng),內(nèi)存映射文件是其內(nèi)部已有的內(nèi)存管理組件的一個(gè)擴(kuò)充。由可執(zhí)行代碼頁(yè)面和數(shù)據(jù)頁(yè)面組成的應(yīng)用程序可根據(jù)需要由操作系統(tǒng)來(lái)將這些頁(yè)面換進(jìn)或換出內(nèi)存。如果內(nèi)存中的某個(gè)頁(yè)面不再需要,操作系統(tǒng)將撤消此頁(yè)面原擁用者對(duì)它的控制權(quán),并釋放該頁(yè)面以供其它進(jìn)程使用。只有在該頁(yè)面再次成為需求頁(yè)面時(shí),才會(huì)從磁盤(pán)上的可執(zhí)行文件重新讀入內(nèi)存。同樣地,當(dāng)一個(gè)進(jìn)程初始化啟動(dòng)時(shí),內(nèi)存的頁(yè)面將用來(lái)存儲(chǔ)該應(yīng)用程序的靜態(tài)、動(dòng)態(tài)數(shù)據(jù),一旦對(duì)它們的操作被提交,這些頁(yè)面也將被備份至系統(tǒng)的頁(yè)面文件,這與可執(zhí)行文件被用來(lái)備份執(zhí)行代碼頁(yè)面的過(guò)程是很類(lèi)似的。圖1展示了代碼頁(yè)面和數(shù)據(jù)頁(yè)面在磁盤(pán)存儲(chǔ)器上的備份過(guò)程:

    作為保障性住房輪候家庭 圖1 進(jìn)程的代碼頁(yè)、數(shù)據(jù)頁(yè)在磁盤(pán)存儲(chǔ)器上的備份

    顯然,如果可以采取同一種方式來(lái)處理代碼和數(shù)據(jù)頁(yè)面,無(wú)疑將會(huì)提高程序的執(zhí)行效率,而內(nèi)存映射文件的使用恰恰可以滿足此需求。

    南京好男科醫(yī)院
    銀川子宮內(nèi)膜炎治療費(fèi)用
    艾拉莫德片是不是止痛藥呢
    猜你會(huì)喜歡的
    猜你會(huì)喜歡的
    主站蜘蛛池模板: 欧美日一区二区三区| 香蕉视频网站在线观看| 成人羞羞视频网站| 亚洲不卡在线观看| 精品国产三级a∨在线| 夜夜影院未满十八勿进| 久久中文字幕人妻丝袜| 欧美伊久线香蕉线新在线| 免费观看日本污污ww网站一区 | narutomanga玖辛奈本子| 日本精品少妇一区二区三区| 亚洲日韩精品无码专区加勒比| 精品女同一区二区三区免费站| 国产成人99久久亚洲综合精品| 91精品国产网曝事件门| 性xxxx18免费观看视频| 久久最近最新中文字幕大全| 欧美日韩亚洲视频| 免费中日高清无专码有限公司| 色老板在线视频一区二区| 国产精品99久久免费观看| 99在线精品视频| 性孕妇video国产中国| 久久国产精品久久久久久| 欧美另类第一页| 亚洲精品无码专区在线播放| 精品日韩欧美一区二区三区| 国产免费小视频在线观看| 18禁男女爽爽爽午夜网站免费| 天堂久久久久久中文字幕| 中文亚洲成a人片在线观看| 日本黄色电影在线| 亚洲人成无码网站久久99热国产| 特级xxxxx欧美| 十七岁免费完整版bd| 草莓视频未满十八岁| 国产成人无码区免费A∨视频网站| 2021在线永久免费视频| 大又大粗又爽又黄少妇毛片| 中文亚洲日韩欧美| 日本三级韩国三级香港三的极不 |