在現代的作業系統中,當我們說到記憶體,往往需要分兩部分來講:物理記憶體和虛擬記憶體。從硬體上講,虛擬空間是cpu內部的定址空間,位於mmu之前,物理空間是匯流排上的定址空間,是經過mmu轉換之後的空間。
一般我們所說的程式在記憶體中的分布指的就是程式在虛擬記憶體中的儲存方式。
從低位址到高位址,可分為下面幾段:
預留記憶體位址(作業系統維護的記憶體位址,不可訪問)
程式**區(唯讀,存**和一些其他的東西);
data段(存初始化的全域性變數和static變數,另外還有文字常量區,常量字串就是放在這裡,程式結束後有系統釋放);
bss段(存未初始化的全域性變數和static變數);
堆(由低位址向高位址增長,一般new和malloc分配,由程式設計師分配釋放);
共享庫檔案(呼叫的庫檔案,位於堆和棧之間);
棧(由高位址向低位址增長,和堆的增長方式相對,對不同的os來說,棧的初始大小有規定,可以修改,目前預設一般為2m,由編譯器自動分配釋放);
再上面存的都是作業系統和核心呼叫的一些記憶體位址。
如圖所示:
附加:編譯器的乙個簡單處理辦法就是,設定乙個固定位址(比如 0x10000)作為起始位址,開始存放**,**之後是資料,所有變數和函式的符號都在這個起始位址之後的某個固定偏移位置。假定程式每次執行都是位於乙個不會變化的起始位址。
> 這裡編譯器產生的位址就是虛擬位址。
程式在記憶體中的分布
在現代的作業系統中,當我們說到記憶體,往往需要分兩部分來講 物理記憶體和虛擬記憶體。從硬體上講,虛擬空間是cpu內部的定址空間,位於mmu之前,物理空間是匯流排上的定址空間,是經過mmu轉換之後的空間。一般我們所說的程式在記憶體中的分布指的就是程式在虛擬記憶體中的儲存方式。從低位址到高位址,可分為下...
程式在記憶體中的分布
在現代的作業系統中,當我們說到記憶體,往往需要分兩部分來講 物理記憶體和虛擬記憶體。從硬體上講,虛擬空間是cpu內部的定址空間,位於mmu之前,物理空間是匯流排上的定址空間,是經過mmu轉換之後的空間。一般我們所說的程式在記憶體中的分布指的就是程式在虛擬記憶體中的儲存方式。從低位址到高位址,可分為下...
程式在記憶體中的分布
在現代的作業系統中,當我們說到記憶體,往往需要分兩部分來講 物理記憶體和虛擬記憶體。從硬體上講,虛擬空間是cpu內部的定址空間,位於mmu之前,物理空間是匯流排上的定址空間,是經過mmu轉換之後的空間。一般我們所說的程式在記憶體中的分布指的就是程式在虛擬記憶體中的儲存方式。從低位址到高位址,可分為下...