複製鏈接
請複製以下鏈接發送給好友

內存映像

鎖定
內存映像,指的是內核在內存中如何存放可執行程序文件。像使用虛擬內存一樣,使用內存映像文件同樣需要經過保留和提交兩個過程,首先在進程內存空間保留一塊區域,然後提交物理存儲給這段區域(映像)。不同的是物理存儲來自於磁盤上的文件,而不是系統的分頁文件。也即將磁盤上指定的數據文件作為虛擬內存,這個實現過程被稱為文件映像,可以將文件全部或部分映像到進程的地址空間中。文件映像過以後,可以把文件映像的部分當作已全部被載入內存一樣的去訪問它,這時又稱它為內存映像文件。
中文名
內存映像
外文名
file mapping
所屬學科
計算機科學
過    程
保留和提取
本    質
內核在內存中存放可執行程序文件
應    用
載入和執行.EXE和.DLL文件等

目錄

內存映像概念

內存映像,指的是內核在內存中如何存放可執行程序文件。像使用虛擬內存一樣,使用內存映像文件同樣需要經過保留和提交兩個過程,首先在進程內存空間保留一塊區域,然後提交物理存儲給這段區域(映像)。不同的是物理存儲來自於磁盤上的文件,而不是系統的分頁文件。也即將磁盤上指定的數據文件作為虛擬內存,這個實現過程被稱為文件映像,可以將文件全部或部分映像到進程的地址空間中。文件映像過以後,可以把文件映像的部分當作已全部被載入內存一樣的去訪問它,這時又稱它為內存映像文件。
內存文件映射也是Windows的一種內存管理方法,提供了一個統一的內存管理特徵,使應用程序可以通過內存指針對磁盤上的文件進行訪問,其過程就如同對加載了文件的內存的訪問。通過文件映射這種使磁盤文件的全部或部分內容與進程虛擬地址空間的某個區域建立映射關聯的能力,可以直接對被映射的文件進行訪問,而不必執行文件I/O操作也無需對文件內容進行緩衝處理,所有的文件緩存操作均由系統直接管理,由於取消了將文件數據加載到內存、數據從內存到文件的回寫以及釋放內存塊等步驟,使得內存映射文件在處理大數據量的文件時能起到相當重要的作用。

內存映像應用

1. 系統使用內存映像文件載入和執行.EXE和.DLL文件。一方面節省了系統分頁文件空間,另一方面縮短了加載應用程序開始執行所需的時間。
2. 使用內存映像文件訪問磁盤上的數據文件。繞開對文件實行I/O操作和對文件內容的緩衝,交由操作系統內核去完成。
3. 使用內存映像文件可以實現在多個進程間彼此共享數據。Windows提供了在進程間進行數據通信的其它多種方法。但這些方法也是通過內存映像文件來實現的,所以內存映像文件是實現進程間通信最有效率的方法。

內存映像區別

可執行程序文件和內存映像的區別
1、可執行程序是位於硬盤上的,而內存映像位於內存上;
2、 可執行程序沒有堆棧,因為只有當程序被加載到內存上的時候才會分配相應的堆棧
3、 執行程序是靜態的,因為它還沒運行,但是內存映像是動態的,數據是隨着運行過程改變的;

內存映像佈局

Linux下的內存映像佈局一般有如下幾個段(從低地址到高地址) [1] 
1) 代碼段: 即二進制機器代碼,代碼段是隻讀的,可以被多個進程共享;
2) 數據段: 存儲已初始化的變量,包括全局變量和初始化了的靜態變量;
3) 未初始化數據段: 存儲未被初始化的靜態變量,也就是BSS段
4): 用於存放動態分配的變量;
5) : 用於函數調用,保存函數返回值,參數等等;
參考資料
  • 1.    [德]Michael Kerrisk .Linux/UNIX系統編程手冊:人民郵電出版社,2014年01月