在iOS中,內存主要分爲:棧區
、堆區
、全局區(靜態區)
、常量區
以及代碼區
等五大區,本文主要分析這五大區。markdown
棧區
分析系統數據結構
,其對應的線程或進程
是惟一的從高地址向低地址
擴展的數據結構一塊連續的內存區域
,遵循先進後出
原則0x7
開頭運行時
開闢編譯器自動建立和釋放的
(id self, SEL _cmd)
編譯器自動建立和釋放的
,因此不會產生內存碎片
;一塊連續的內存區域
,因此查找速度快
。一塊連續的內存區域
,因此存儲空間大小有限制
,
1M
,其餘線程是512kb
,實際上咱們也能夠經過線程的stackSpace去修改,可是成本有些大從低地址向高地址
擴展數據內存區域是不連續
的,方便增、刪、改
,相似鏈表
先進先出FIFO
原則0x6
開頭運行時
分配內存new
、alloc
、malloc
、realloc
生成的內存放在堆區運行時
開闢,且內存區域是不連續
的,致使容易出現內存碎片
ARC
管理內存,因此通常無需手動釋放全局區(靜態區)是編譯時分配
的內存區域。在iOS中通常以0x1
開頭,在程序運行時一直存在,直到程序結束釋放空間。數據結構
static
修飾的變量成爲靜態變量
,該變量內存放在全局區(靜態區)
,由程序編譯時建立。static
能夠修飾局部變量也能夠修飾全局變量常量區是一塊比較特殊的存儲區,常量區裏面存放的是常量,常量字符串就存放在常量區。 常量區的內存在編譯階段
完成分配,程序運行時會一直存在內存中,只有當程序結束後
纔會由操做系統釋放。函數
存放可執行代碼的二進制文件區
,它在程序編譯時
存入,只可讀不可寫
spa
棧區、堆區內存空間是運行時
分配的,所以隨着程序運行而變化;在iOS中堆區的內存是應用程序共享的,堆區的內存分配是系統負責的。全局區(靜態區)、常量區、代碼區是在編譯時
分配,是固定的不可變的。操作系統