1. 程式人生 > >IOS 記憶體空間堆 棧 全域性區 程式碼區 資料區

IOS 記憶體空間堆 棧 全域性區 程式碼區 資料區

面試經常會問道的一道題。一般課程中介紹的都比較籠統,下面看一下簡單的劃分


其實培訓課程中,這樣簡單的劃分是有問題的。下面我們一起來看一下真正的記憶體區域,以及每個區域的重點。

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

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

 

這裡會經常問到auto和static的區別,如果籠統的回答,auto是預設的,static是靜態的。那100分只有10分,如果能從記憶體空間的角度去答,才能讓面試官滿意。具體可參考上一篇詳解static的文章,上面這段話加上static的文章詳解。就可以滿分了

文章地址:https://blog.csdn.net/lee727n/article/details/80196045

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


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

 

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

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

 

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

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