天天看點

記憶體虛拟位址空間布局記憶體虛拟位址空間布局

記憶體虛拟位址空間布局

ARM64虛拟位址空間劃分

虛拟位址空間被分為使用者位址空間和核心位址空間,因為64位的虛拟位址空間太大,目前應用還沒有這麼大的需求,是以ARM64虛拟位址最大寬度為48位,是以有一部分位址空間是不可用的,圖為ARM64虛拟位址空間的劃分

記憶體虛拟位址空間布局記憶體虛拟位址空間布局

Note: 所有程序共享核心位址空間,每個程序有自己獨立的使用者位址空間,同一個線程組的線程共享使用者位址空間。

使用者虛拟位址空間布局

記憶體虛拟位址空間布局記憶體虛拟位址空間布局
  • 使用者虛拟位址空間主要分為Text區域、Data區域、BSS區域、堆、記憶體映射區域、Stack區域等
    • Text區域:程式代碼段
    • Data區域:全局資料段
    • BSS區域:未初始化資料段
    • 堆區域:malloc申請的記憶體區域
    • mmap記憶體映射區域:動态連接配接so庫代碼段、資料段、未初始化資料段的區域
    • stack區域:局部變量和函數調用棧區域
  • vm_area_struct是核心中表示各個區域的資料結構,他們一連結清單的形式連接配接起來。
  • task_struct是核心中程序的資料結構,其成員mm指向程序的使用者虛拟位址空間mm_struct,mm_struct的mmap是使用者虛拟位址空間連結清單的表頭,mm_rb是虛拟記憶體區域的紅黑樹。

Note: Text區域、Data區域、BSS區域在編譯連結完成後,其虛拟位址就已經确定了。

核心虛拟位址空間布局

核心虛拟位址空間分布

記憶體虛拟位址空間布局記憶體虛拟位址空間布局

參考

  • https://www.jianshu.com/p/079e21d50050
  • https://www.jianshu.com/p/a608e7adfc5d