函式執行時的動態儲存分配

2021-06-19 04:01:48 字數 655 閱讀 3878

• 棧(stack)用於分配後進先出lifo的資料

– 如函式呼叫

• 堆(heap)用於不符合lifo的

– 如指標所指向空間的分配

函式呼叫及返回的步驟

•呼叫– 儲存呼叫資訊(引數,返回位址)

– 分配資料區(區域性變數)

– 控制轉移給被調函式的入口

• 返回

– 儲存返回資訊

– 釋放資料區

– 控制轉移到上級函式(主呼叫函式)

儲存分配圖:

1、棧區(stack):由編譯器自動分配釋放,存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。

2、堆區(heap):一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os**。注意它與資料結構中的堆是兩回事,分配方式倒是類似於鍊錶。

3、全域性區(靜態區)(static):全域性變數和靜態變數的儲存是放在一塊的,初始化的全域性變數和靜態變數在一塊區域,未初始化的全域性變數和未初始化的靜態變數在相鄰的另一塊區域。程式結束後有系統釋放。

4、文字常量區:常量字串就是放在這裡的。程式結束後由系統釋放。

5、程式**區:存放函式體的二進位制**。

程式執行時的記憶體分配

一 在程式執行期間,變數儲存空間有三種 1 靜態儲存區。內存在程式編譯的時候就已經分配好了,這塊內存在程式執行期間都存在,儲存全域性變數和靜態變數。2 棧儲存區。記憶體是在程式執行期間才分配的,函式內區域性變數及函式引數的儲存單元,當 函式執行結束時這些儲存單元自動被釋放。棧記憶體分配運算內置於處理...

IOS runtime動態執行時一

對執行時不太了解,今天小夥伴橄欖油陳高給發了個鏈結 看了一部分先存著以後慢慢品 今天一句一句的讀了下 慢慢有了點感覺,把主要的截圖貼在這以後好多看幾遍 typedef struct objc class class struct objc class class isa 指向metaclass,也就...

IOS runtime動態執行時一

對執行時不太了解,今天小夥伴橄欖油陳高給發了個鏈結 看了一部分先存著以後慢慢品 今天一句一句的讀了下 慢慢有了點感覺,把主要的截圖貼在這以後好多看幾遍 typedef struct objc class class struct objc class class isa 指向metaclass,也就...