程式在記憶體中的分段

2022-07-16 10:57:09 字數 765 閱讀 5456

當乙個程式執行時,這個程式不同的部分也會在記憶體的不同的區域上面儲存

**段:程式執行時會把可執行檔案的記憶體載入到這塊記憶體,程式如何執行由**段的資料決定,**段的內容是唯讀。

唯讀段:用來儲存唯讀資料的,如:字面值資料,常量。

資料段:儲存初始化過的全域性變數、靜態變數。

靜態資料段:儲存未初始化過的全域性變數、靜態變數(這段內存在程式執行前會被初始化為零,這也是為什麼全域性變數會有預設值)。

棧:儲存區域性變數、塊變數等資料,這段記憶體有作業系統管理,自動申請自動釋放。

堆:由程式設計師管理的一塊記憶體。

下面來說說棧與堆的區別:

棧:它是採一種棧結構(先進後出)的方式管理記憶體,它的申請和釋放歸作業系統管理。

棧記憶體的大小有限,不適合儲存大量資料。

棧記憶體可以與識別符號建立聯絡(定義變數)。

棧記憶體不適合長久儲存資料(當函式結束後它就會被釋放)。

棧記憶體歸作業系統管理,幾乎不會出現什麼錯誤。

棧記憶體使用方便,隨時定義、使用、釋放。

堆:資料無序的順序儲存在記憶體中,它的申請和釋放受程式設計師的控制。

堆記憶體的大小理論上等於物理記憶體的大小。

堆記憶體只能與指標配合使用(無法取名字)。

堆記憶體的釋放是受控制的,一般程式中長期使用的資料都會從資料庫、檔案中讀取到堆記憶體中。

堆記憶體歸程式設計師管理,如果程式設計師的水平有限可能會出現記憶體洩漏、碎片等問題。

堆記憶體使用麻煩,需要借助標準庫函式(標頭檔案),申請(計算大小)、使用(與指標配合)、釋放(不能重複放、指標要置空)。

程式在記憶體中的分布

在現代的作業系統中,當我們說到記憶體,往往需要分兩部分來講 物理記憶體和虛擬記憶體。從硬體上講,虛擬空間是cpu內部的定址空間,位於mmu之前,物理空間是匯流排上的定址空間,是經過mmu轉換之後的空間。一般我們所說的程式在記憶體中的分布指的就是程式在虛擬記憶體中的儲存方式。從低位址到高位址,可分為下...

程式在記憶體中的分配

程式的記憶體分配 乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放,存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os 注意它與資料結構中的堆是兩回...

程式在記憶體中的分布

在現代的作業系統中,當我們說到記憶體,往往需要分兩部分來講 物理記憶體和虛擬記憶體。從硬體上講,虛擬空間是cpu內部的定址空間,位於mmu之前,物理空間是匯流排上的定址空間,是經過mmu轉換之後的空間。一般我們所說的程式在記憶體中的分布指的就是程式在虛擬記憶體中的儲存方式。從低位址到高位址,可分為下...