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會自動將該檔案擴充套件到指定的大小。
將檔案資料對映到程序的位址空間
pdata := mapviewoffile(fmaphandle, file_map_write, 0, 0, ifilesize);
然後我們就可以通過pdata指標充分利用為我們多擴充的這600兆記憶體了。當然是用完以後,要做一些清場工作。從程序的位址空間中撤銷對映關閉檔案對映物件和開啟的檔案closehandle(hfilemap);
closehandle(hfile);
作者blog:
利用記憶體對映處理檔案
最近閒來無聊,想寫乙個簡單的檔案操作的類。但是由於經驗尚淺,對於類的設計總是把握的不是太好。c 畢竟是物件導向,而且自己又學過設計模式 個人覺得這個非常有用 當然也就希望自己設計的類有物件的意味了。學習的最好方法就是模仿,在我印象中c net框架中的類設計的很好,就借鑑一下。net中操作檔案的類如下...
擴充windows應用程式可用記憶體數到3GB
1.對於32位的windows win2003 winxp win7 應用程式能使用的最大記憶體數僅為2gb。在不同的系統中,可以通過如下方法來開啟3gb選項,使得應用程式可以使用超過2gb的記憶體。win2003 winxp開啟3gb a.開啟 windows 資源管理器。b.在 工具 選單上,單...
Dex檔案的記憶體對映
前面我們了解過dex檔案的檔案格式,資料型別等知識,這裡我們來簡單分析一下,dex檔案在記憶體中的對映關係。dexfile的結構體原始碼如下 struct dexfile 在dexheader結構中,有乙個mapoff欄位,它指明了dexmaplist結構在dex檔案中的偏移,它的宣告如下 stru...