每個程序運行起來以后,它將擁有自己獨立的虛擬地址空間。這個虛擬地址空間的大小與操作系統的位數有關系。例如32位硬件平台的虛擬地址空間的地址可以從0~2^32-1,即0x00000000~0xFFFFFFFF,總共4GB大小。在32位Windows操作系統中,高地址的2GB位內核空間,用戶空間只有2GB,而32位Linux的內核空間只有1GB,用戶空間有3GB大小。而64位操作系統,用戶可用空間則要大的多。C/C++程序在虛擬內存中的排布大概如下所示(僅僅列出了相關的主要段):
相關解釋:
棧區(stack): 由編譯器自動分配釋放 ,存放函數的參數值,局部變量的值等。
堆區(heap) : 一般由程序員分配釋放, 若程序員不釋放,在程序結束時,操作系統回收。
BSS段(Block Started by Symbol):.bss段被用來存放那些沒有初始化或者初始化為0的全局變量。bss段只占運行時的內存空間而不占文件空間。在程序運行的整個周期內,.bss段的數據一直存在
全局區(靜態區):全局變量和靜態變量的存儲是放在一塊的, 未初始化的全局變量和未初始化的靜態變量在相鄰的另一塊區域。 在程序序結束后由系統釋放。
DATA區(初始化的數據段):為數據分配空間,數據保存在目標文件中
文字(只讀)常量區 :常量字符串就是放在這里的。 程序結束后由系統釋放
代碼段(TXT):存放函數體的二進制代碼
本文章參考相關文章連接: