【转】程序在内存中的分布
?前些天學習到了程序在虛擬內存中分布的一些知識點,結合在網上查閱的一些資料,整理一下知識點。本博客參考博主?hackbuteer1的《程序在內存中的分布》這篇文章。
?
? ??
?
v?在現代的操作系統中,當我們說到內存,往往需要分兩部分來講:物理內存和虛擬內存。從硬件上講,虛擬空間是CPU內部的尋址空間,位于MMU之前,物理空間是總線上的尋址空間,是經過MMU轉換之后的空間。
?
例如:對于一臺內存為256M的32bit x86主機來說,它的虛擬地址空間范圍是0~0xFFFFFFFF(4G),而物理地址空間范圍是0x00000000~0x0FFFFFFF(256M)。
?
v?一般我們所說的程序在內存中的分布指的就是程序在虛擬內存中的存儲方式。
?
從低地址到高地址,可分為下面幾段:?
??預留內存地址(操作系統維護的內存地址,不可訪問)?
?
??程序代碼區(只讀,存代碼和一些其他的東西);?
?
??data段(存初始化的全局變量和static變量,另外還有文字常量區,常量字符串就是放在這里,程序結束后有系統釋放);?
?
??bss段(存未初始化的全局變量和static變量);?
?
??堆(由低地址向高地址增長,一般(C++)new和(C)malloc分配,由程序員分配釋放);
?
??共享庫文件(調用的庫文件,位于堆和棧之間);?
?
??棧(由高地址向低地址增長,和堆的增長方式相對,對不同的OS來說,棧的初始大小有規定,可以修改,目前默認一般為2M,由編譯器自動分配釋放);?
?
?
?
?
?
v?以上程序在虛擬內存空間中的分布,適用于一般的操作系統和內核。但不完全適用,例如:《unix系統編程》32位下,0-3G是用戶區,3G-4G是內核區。
總結
以上是生活随笔為你收集整理的【转】程序在内存中的分布的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华为路由器推出延长服务宝:仅9.9元可延
- 下一篇: 【转】Dynamics CRM 365零