天天看點

IOS 記憶體空間堆 棧 全局區 代碼區 資料區

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

IOS 記憶體空間堆 棧 全局區 代碼區 資料區

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

1.棧區(stack) 由編譯器自動配置設定并釋放,存放函數的參數值,局部變量等。棧是系統資料結構,對應線程/程序是唯一的。優點是快速高效,缺點時有限制,資料不靈活。[先進後出]

棧空間分靜态配置設定 和動态配置設定兩種。

IOS 記憶體空間堆 棧 全局區 代碼區 資料區

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

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

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

IOS 記憶體空間堆 棧 全局區 代碼區 資料區

優點是靈活友善,資料适應面廣泛,但是效率有一定降低。

IOS 記憶體空間堆 棧 全局區 代碼區 資料區

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

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

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

5.代碼區 存放函數的二進制代碼

IOS 記憶體空間堆 棧 全局區 代碼區 資料區
IOS 記憶體空間堆 棧 全局區 代碼區 資料區
IOS 記憶體空間堆 棧 全局區 代碼區 資料區

繼續閱讀