程序在内存中的分布
?在現代的操作系統中,當我們說到內存,往往需要分兩部分來講:物理內存和虛擬內存。從硬件上講,虛擬空間是CPU內部的尋址空間,位于MMU之前,物理空間是總線上的尋址空間,是經過MMU轉換之后的空間。
一般我們所說的程序在內存中的分布指的就是程序在虛擬內存中的存儲方式。
從低地址到高地址,可分為下面幾段:?
預留內存地址(操作系統維護的內存地址,不可訪問)?
程序代碼區(只讀,存代碼和一些其他的東西);?
data段(存初始化的全局變量和static變量,另外還有文字常量區,常量字符串就是放在這里,程序結束后有系統釋放);?
bss段(存未初始化的全局變量和static變量);?
堆(由低地址向高地址增長,一般new和malloc分配,由程序員分配釋放);
共享庫文件(調用的庫文件,位于堆和棧之間); ?
棧(由高地址向低地址增長,和堆的增長方式相對,對不同的OS來說,棧的初始大小有規定,可以修改,目前默認一般為2M,由編譯器自動分配釋放);?
再上面存的都是操作系統和內核調用的一些內存地址。
如圖所示:
一般我們所說的程序在內存中的分布指的就是程序在虛擬內存中的存儲方式。
從低地址到高地址,可分為下面幾段:?
預留內存地址(操作系統維護的內存地址,不可訪問)?
程序代碼區(只讀,存代碼和一些其他的東西);?
data段(存初始化的全局變量和static變量,另外還有文字常量區,常量字符串就是放在這里,程序結束后有系統釋放);?
bss段(存未初始化的全局變量和static變量);?
堆(由低地址向高地址增長,一般new和malloc分配,由程序員分配釋放);
共享庫文件(調用的庫文件,位于堆和棧之間); ?
棧(由高地址向低地址增長,和堆的增長方式相對,對不同的OS來說,棧的初始大小有規定,可以修改,目前默認一般為2M,由編譯器自動分配釋放);?
再上面存的都是操作系統和內核調用的一些內存地址。
如圖所示:
總結
- 上一篇: 15个Google面试题以及答案~~~~
- 下一篇: 阿里云2011.9.17招聘会笔试题