iOS棧區 堆區等概念以及區別

棧區 (stack)

棧通常來講都是一個先進後出的隊列,後進入的數據,會被先釋放掉.棧區存放函數內的局部變量,形參和函數返回值.棧區的內存由系統自動管理釋放,內存的分配是連續的,且分配的內存地址是向下增加.申明的變量過了做用域範圍後內存便會自動釋放,不須要開發人員手動管理. 數據結構

棧區分配的內存地址向下增加

堆區 (heap)

堆通常是個鏈表或者樹結構,不一樣語言有不一樣實現,相對而言複雜的多.堆區通常由開發人員手動管理(malloc()函數申請),若是開發人員沒有手動釋放(free()),容易形成內存泄漏,只有程序結束時由系通通一回收.堆區在內存中的分佈是不連續的,是由不一樣區域的內存塊經過指針連接.函數

總結

從上面能夠看出,棧區內存由系統自動分配,速度較快,可是沒法由開發人員控制.相比較而言,堆區有着更好的動態分配性能,可是通常存放在堆區的每每數據結構更加複雜,會致使操做的成本遠遠大於棧區,效率比棧區低性能

代碼區

存放函數的二進制代碼,代碼區的內存是由系統控制指針

靜態區(static)

靜態區存放全局變量和靜態變量,內存在程序結束後由系通通一釋放code

常量區

常量區存放常量字符串,也是在程序結束後由系統釋放內存cdn

相關文章
相關標籤/搜索