程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 利用內存映射文件擴充程序可用的內存

利用內存映射文件擴充程序可用的內存

編輯:Delphi

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

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

具體方法如下:

//先在硬盤上建立一個文件,訪問標志為可讀寫,

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

//創建文件映射對象, iFileSize指定要建立的映射文件的大小,例如600兆 則iFileSize = 1024 * 1024 *600。當我們打開的硬盤上的文件沒有這麼大時,Windows會自動將該文件擴展到指定的大小。

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

//將文件數據映射到進程的地址空間

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

然後我們就可以通過pData指針充分利用Windows為我們多擴充的這600兆內存了。當然是用完以後,要做一些清場工作。

//從進程的地址空間中撤銷映射

UnmapVIEwOfFile(pData);

//關閉文件映射對象和打開的文件

CloseHandle(hFileMap);

CloseHandle(hFile);

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved