iOS總結 記憶體的幾大區域

2021-08-30 11:39:25 字數 1073 閱讀 8712

參考: 

1.棧區(stack)由編譯器自動分配並釋放,存放函式的引數值,區域性變數等.棧是系統資料結構,對應執行緒/進場是唯一的.優點快速高效缺點資料不靈活   先進後出

棧空間分靜態分配和動態分配兩種

靜態分配是編譯器完成的,比如自動變數(auto)的分配

動態分配由alloca函式完成

棧的動態分配無需釋放,是自動的,也就是沒有釋放函式,棧的動態分配操作是不被鼓勵的

2.堆區(heap)有程式設計師分配和釋放,如果程式設計師不釋放,程式結束時,可能會由作業系統**,比如在ios中alloc都是存在堆中

優點靈活方便,資料適應面廣泛,但是效率有一定降低

堆是函式庫內部資料結構,不一定唯一. 不同堆分配的記憶體無法互相操作,堆空間的分配總是動態的.

雖然程式結束時所有的資料空間都會被釋放回系統,但是精確的申請記憶體,釋放記憶體匹配是良好程式的基本要素.

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

全域性區分為未初始化區全域性區: .bss段和初始化全域性區: data段.      如: int a    未初始化    int a = 10; 已初始化的

4.文字常量區  存放常量字串    程式結束後由系統釋放

5.**區   存放函式的二進位制**

棧區 由編譯器自動分配釋放      區域性變數是儲存在棧區的   方法呼叫的實參也是儲存在棧區的

堆區  由程式設計師分配釋放,如程式設計師不釋放, 會出現記憶體洩漏, 使用new方法建立的物件  被建立物件的所有成員變數

bss段/資料段/**段  程式結束後由系統釋放

只要棧的剩餘空間大於申請空間,系統就提供記憶體,否則棧溢位

棧就是 去飯館吃飯, 只管點菜    

堆  是自己動手做飯

iOS 記憶體的幾大區域

棧區 stack 由編譯器管理 分配釋放 存放函式引數值 區域性變數的值 函式中的基本資料型別 棧區的操作方式類似資料結構中的棧 先進後出 堆區 heap 由程式設計師管理 分配釋放 若程式設計師不釋放,程式結束時可能由系統 os 存放程式設計師new出來的物件。堆的操作方式與資料結構中的堆不同,操...

記憶體的5大區域介紹

1.棧區 stack 是由 編譯器 自動分配並釋放,存放函式的 引數值 區域性變數等。棧是 系統 資料結構,對應的 執行緒 程序 是唯一的。優點是快速高效,缺點是資料不靈活 先進先出 棧空間 靜態分配 動態分配。靜態分配 由編譯器完成的,比如自動變數 auto 的分配。動態分配 由alloc函式完成...

OC 記憶體管理 記憶體5大區域

棧區域 系統自動分配.儲存區域性變數 如 int num 10,int p num。num 與 p 都儲存在棧區域 堆區域 允許程式設計師手動的從堆申請空間來使用,要主動釋放。除非程式結束 如 int 4,float 4 malloc,calloc bss段區域 儲存未初始化的全域性變數 靜態變數,...