在物理內存不足的情況下使用內存映射文件進行大內存操作

我們在寫程序的過程中常常會出現程序需要佔用大量內存,但是系統物理內存中根本不存在那麼多的內存空間。這個時候我們一般可以考慮使用以下技術來解決問題:

  • 虛擬內存技術
  • 內存映射文件技術


虛擬內存技術:
虛擬內存技術是根據系統頁面文件(pagefile.sys)進行頁面交換達到切換內存的目的。但是究其本質,我們會發現,虛擬內存技術本質上還是通過對頁面文件的交換達到提高物理內存的使用效率問題。

目前在這裏先不詳談虛擬內存使用技術。

內存映射文件技術:
內存映射文件技術是通過將文件內容映射到內存空間中,從而實現以下三種目的:
  • 加載和執行DLL或EXE程序;
  • 不使用文件系統IO和緩存來訪問磁盤上的數據文件;
  • 進程之間相互進行通信;


那麼,我們在這裏介紹內存映射文件主要是對目的2來滿足我們在物理內存不足的情況下完成內存的使用。

內存映射文件的基本使用步驟如下:
  • 創建/打開一個文件。CreateFile
  • 在這個文件上創建一個文件映射內核對象。CreateFileMapping
  • 將文件映射內核對象的全部或者部分映射到當前進程的進程空間中。MapViewOfFile
  • 步驟3會得到內存指針,直接操作指針即可。
  • 在退出前從內存空間中撤銷文件映射內核對象的映射。UnmapViewOfFile
  • 關閉文件映射內核對象。CloseHandle
  • 關閉數據文件。CloseHandle
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章