程式裝載時,將程式使用的虛擬記憶體位址和計算機實際分配的物理記憶體位址做了對映。
程式裝載時獲取了一段連續空間,關閉該程式時,該程式雖然釋放了占用的記憶體空間,但是該記憶體空間並不一定與空餘記憶體空間連續,故其他程式申請時可能無法申請到該記憶體空間。如圖一。
有一種解決辦法是記憶體交換,將程式放到硬碟中隨用隨獲取記憶體空間,可一定程度保證記憶體空間連續,代價是硬碟讀寫速度慢,占用空間過大的程式採用記憶體交換方法會導致程式卡頓。linux 作業系統分配乙個 swap 硬碟分割槽就是專門給 linux 作業系統進行記憶體交換用的。
分段方式不夠靈活,採用分頁方式,將記憶體空間切分為固定大小的頁,程式申請多個頁,遇到記憶體碎片或空間不足時再通過記憶體交換的方式調整某幾頁記憶體。
可執行程式的裝載
elf檔案頭部有一些重要的資訊 例如 entry point address 0x8048000 是可執行檔案載入到記憶體中開始執行的第一行 裝載時動態鏈結 load time dynamic linking 這種方法的前提是在編譯之前已經明確知道要呼叫的動態庫的哪些函式,編譯時在目標檔案中只保留必...
程式鏈結與裝載
程式的執行需要執行環境支撐,其執行環境一般由記憶體 執行庫和系統呼叫構成。其中系統呼叫部分程度上充當的是程式與核心進行互動的中介。其中首先需明白,程式與記憶體關係。記憶體是承載程式執行的介質,也是程式進行各種運算和表達的場所。window在預設情況下會將高位址的 2g 空間分配給核心 4g記憶體情況...
RAILS類的裝載程式
rails類的裝載程式 在純ruby中,乙個指令碼檔案不需要用特殊的方式命名去匹配他的內容。然而,在rails中,你必須注意,總是在ruby件名和檔案所包含的類有個很直接的關聯。rails充分利用ruby所提供的無效常量 機制。當rails在 偶爾遇到乙個未定義的常量,它使用乙個基於檔案命名協定的類...