每個行程看到的是獨立、線性的 0~MAX 虛擬位址空間,但並非連續——部分區段可能缺失(無對應實體記憶體)。虛擬記憶體以頁為單位管理(通常 4KB),每頁對應實體記憶體中的幀。分頁機制讓作業系統能將暫不用的頁交換到磁碟,實現記憶體超額使用。
printf 程式碼)。行程存取無幀對應的頁 → CPU 觸發缺頁例外 → 核心掛起行程 → 調度建立頁-幀對應(換入) → 恢復行程。此過程涉及磁碟 IO,頻繁發生會嚴重降低效能。
| 方式 | 說明 | 可釋放? |
|---|---|---|
exec 族函式 | 建立虛擬空間、載入程式映像 | 不可(行程結束自動回收) |
| 程式設計介面 | malloc/mmap/sbrk 等 | 可(free/munmap) |
將虛擬頁直接對應常規檔案,存取虛擬記憶體即隱含檔案讀寫。按需分頁特性:只在實際存取觸發頁面錯誤時才進行 IO,極適合大檔案隨機存取。
虛擬位址空間按段組織,配合分頁形成段頁式管理。三大核心段:
| 段名 | 內容 | 特性 |
|---|---|---|
| Text Segment | 指令、字面常數、靜態常數 | exec 載入,唯讀,全生命週期固定大小 |
| Data Segment | 全域/靜態變數、堆積 | exec 預載初始值,可擴縮(brk/sbrk),有最小固定空間 |
| Stack Segment | 函式呼叫框架、區域變數 | 隨堆疊增長自動擴展,不會自動縮減 |
mmap 區域,釋放時 munmap 歸還 OS。理解虛擬記憶體分頁、段式劃分、缺頁機制與 glibc 分配器策略,有助於診斷記憶體洩漏、碎片化、效能抖動等疑難雜症,也是系統級效能調優的基石。