關於靜態儲存區域 棧 堆

2021-05-25 17:59:37 字數 1068 閱讀 9367

有關動態物件建立:一般來說,編譯器將記憶體分為三部分:靜態儲存區域、棧、堆。靜態儲存區主要儲存全域性變數和靜態變數,棧儲存呼叫函式相關的變數、位址等,堆儲存動態生成的變數,在c中是指由malloc,free運算產生釋放的儲存空間,在c++中就是指new和delete運算子作用的儲存區域。

昨天才看ppt看到 囧 少壯不努力老大徒傷悲阿……

10.2.1  靜態儲存分配

指在編譯時對資料物件分配固定的儲存位置,執行時始終不變。即一旦儲存空間的某個位置分配給了某個資料名,則在目標程式的整個執行過程中,此位置(位址)就屬於該資料名。

由靜態儲存分配產生的資料區稱為靜態資料區。

靜態儲存分配適用於不允許遞迴過程或遞迴呼叫,不允許可變體積的資料結構的語言

靜態儲存分配的特點:簡單、易於實現

例:fortran語言,它所有的資料都屬於這一類。

10.2.2  動態儲存分配

指在執行階段動態地為源程式中的資料物件分配儲存位置

實行動態儲存分配的語言的特點:

允許遞迴過程

允許可變資料結構(可變陣列或記錄等)

允許使用者自由申請和釋放空間

這種程式在編譯時無法確定執行時所需資料空間的大小,需待程式執行時動態確定

有兩種動態儲存分配方式:棧式(stack)、堆式(heap)。

10.2.3  棧式動態儲存分配

在資料空間中開闢乙個棧區,每當呼叫乙個過程時,它所需要的資料空間就分配在棧頂,每當過程工作結束時就釋放這部分空間。空間的使用符合先借後還的原則。

特點:先借後還,管理簡單,空間使用效率高

棧式動態儲存分配適合於pascal、c等典型過程式語言。

10.2.4  堆式動態儲存分配

在資料空間中開闢一片連續的儲存區(通常叫做堆),每當需要時就從這片空間借用一塊,不用時再退還。借用與歸還未必服從「先借後還」的原則。

堆式動態儲存分配適合於使用者可以自由申請和歸還資料空間的語言,如c++。

特點:適用範圍廣,容易出現碎片。

如何充分利用空間是個難題。

關於儲存區域位置,堆與棧

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

關於靜態儲存區域,堆,棧

有關動態物件建立 一般來說,編譯器將記憶體分為三部分 靜態儲存區域 棧 堆。靜態儲存區主要儲存 全域性變數和靜態變數,棧儲存呼叫函式相關的變數 位址等,堆儲存動態生成的變數,在c中是指由malloc,free運算產生釋放的儲存空間,在c 中 就是指new和delete運算子作用的儲存區域。1 靜態儲...

動態區域(棧 堆) 靜態儲存區(資料段和程式段)

內容收集比較混亂,僅供參考 1 類成員變數存放在堆區,所有類的例項和陣列都是在堆上分配記憶體的,堆記憶體由存活和死亡的物件,空閒碎片區組成,物件所佔的堆記憶體是由自動記憶體管理系統 2 堆允許程式在執行時動態地申請某個大小的記憶體。3 一般由程式設計師分配釋放,若程式設計師不釋放,則可能會引起記憶體...