国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

利用內(nèi)存映射文件擴(kuò)充程序可用的內(nèi)存

2019-11-18 18:38:21
字體:
供稿:網(wǎng)友
               利用內(nèi)存映射文件擴(kuò)充程序可用的內(nèi)存

Windows利用頁交換文件來擴(kuò)充應(yīng)用程序?qū)嶋H可用的內(nèi)存,而不僅限于實(shí)際的32兆或64兆物理內(nèi)存。但是Windows的頁交換文件是所有程序共用的,所以我們的程序要想獲得更大的內(nèi)存還是比較困難,比如600兆或者更多。難道就沒有辦法了嗎?Windows提供的內(nèi)存映射文件為我們提供解決問題的途徑。

在硬盤上建立一個600兆的文件,然后將它映射到我們進(jìn)程的地址空間,Windows會返回一個指向這塊內(nèi)存地址的指針,我可以像使用一個600兆的大數(shù)組一樣使用該指針,Windows會為我們做好從硬盤文件到內(nèi)存和從內(nèi)存到硬盤文件的交換工作,就像我們使用Windows本身的虛擬內(nèi)存一樣,不用我們費(fèi)一點(diǎn)心思,而且速度很快。

具體方法如下:

//在硬盤上建立一個文件,訪問標(biāo)志為可讀寫

hFile := CreateFile(PChar(FileName), GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);

//創(chuàng)建文件映射對象, iFileSize指定要建立的映射文件的大小,例如600 iFileSize = 1024 * 1024 *600。當(dāng)我們打開的硬盤上的文件沒有這么大時,Windows會自動將該文件擴(kuò)展到指定的大小。

hFileMap := CreateFileMapping(hFile, nil, Page_ReadWrite, 0,  iFileSize, nil);

//文件數(shù)據(jù)映射到進(jìn)程的地址空間

pData := MapViewOfFile(FMapHandle, FILE_MAP_WRITE, 0, 0, iFileSize);

然后我們就可以通過pData指針充分利用Windows為我們多擴(kuò)充的這600兆內(nèi)存了。當(dāng)然是用完以后,要做一些清場工作。

//進(jìn)程的地址空間中撤銷映射

UnmapViewOfFile(pData);

//關(guān)閉文件映射對象和打開的文件

CloseHandle(hFileMap);

CloseHandle(hFile);


上一篇:關(guān)于中文折行及相關(guān)問題的解決方法

下一篇:用面向?qū)ο蠓椒ń鉀Q24點(diǎn)問題

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
學(xué)習(xí)交流
熱門圖片

新聞熱點(diǎn)

疑難解答

圖片精選

網(wǎng)友關(guān)注

主站蜘蛛池模板: 确山县| 南投市| 迭部县| 仪征市| 西峡县| 岱山县| 新泰市| 桂阳县| 阜阳市| 台湾省| 望谟县| 桦甸市| 鹿泉市| 眉山市| 仲巴县| 朝阳区| 诸暨市| 合水县| 哈巴河县| 垫江县| 太和县| 怀安县| 夹江县| 富裕县| 疏勒县| 克东县| 巴彦淖尔市| 准格尔旗| 灵宝市| 元江| 石门县| 正蓝旗| 威远县| 双鸭山市| 关岭| 阳信县| 新泰市| 南京市| 宿松县| 水城县| 林州市|