每個程式執行起來以後,它將擁有自己獨立的虛擬位址空間。這個虛擬位址空間的大小與作業系統的位數有關係。例如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):存放函式體的二進位制**
C C 的記憶體分布
說明 1 棧又叫堆疊,非靜態區域性變數 函式引數 返回值等等,棧是向下增長的。2 記憶體對映段是高效的i o對映方式,用於裝載乙個共享的動態記憶體庫。使用者可使用系統介面建立共享共 享記憶體,做程序間通訊。3 堆用於程式執行時動態記憶體分配,堆是可以上增長的。4 資料段 儲存全域性資料和靜態資料。5...
C C 程式的記憶體分布
理解c c 程式中的記憶體分布,可以幫助我們減少程式設計時犯常見的錯誤,如將指向區域性變數的位址返回等。在c c 中,通常可以把記憶體理解成4個分割槽 棧 堆 全域性 靜態儲存區和常量儲存區。1 棧 通常是用於那些在編譯期間就能確定儲存大小的變數的儲存區,用於在函式作用域內 塊作用域 建立 在離開作...
c c 程序記憶體分布詳解
乙個程式呼叫的記憶體主要被劃分為4個區域,分別是棧區,堆區,資料區,區 首先來講講棧區 然後我們來說堆區 接下來是資料區 在main函式內 char str hallo 這裡用乙個指標變數str的記憶體空間存放在棧區裡面佔了sizeof char 個位元組,而系統還分配了6個位元組的空間給 hall...