iOS內(nèi)存五大區(qū)

iOS內(nèi)存主要分成棧區(qū)、堆區(qū)、全局區(qū)、常量區(qū)、代碼區(qū)這五大區(qū)域。如下圖所示:

內(nèi)存五大區(qū).png

棧(Stack)

棧是由高地址向低地址擴(kuò)展的一塊連續(xù)的內(nèi)存區(qū)域,一般在運行時分配,其對應(yīng)的進(jìn)程或線程是唯一的,它遵循先進(jìn)后出(FILO)的原則。

在iOS中棧區(qū)的地址通常以0x7開頭,棧的大小是有限制的,在主線程棧的大小為1MB,子線程棧的大小默認(rèn)為512KB,當(dāng)然可以通過api修改子線程棧的大小(NSThread的stackSize屬性),但棧最小為16KB且為4的倍數(shù)。

棧是編譯器自動分配并釋放的,不需要開發(fā)者管理內(nèi)存,它不會產(chǎn)生內(nèi)存碎片,特點是快速高效。

通常棧區(qū)存放的是臨時變量和函數(shù)參數(shù)。

堆(Heap)

堆是低地址向低地址擴(kuò)展的一塊不連續(xù)的內(nèi)存區(qū)域,同樣在運行時分配,它是一個鏈表結(jié)構(gòu),相比于棧,它速度較慢,但空間更大。

在iOS中堆通常以0x6開頭,它的空間分配總是動態(tài),由于它是鏈表結(jié)構(gòu),所以堆便于增刪,不便于查找。

堆是開發(fā)者動態(tài)分配和釋放,在使用堆時往往要注意內(nèi)存管理,很容易就產(chǎn)生內(nèi)存碎片,比如打上retain時要注意release,當(dāng)然在ARC的情況下,內(nèi)存管理要容易的多。

堆區(qū)通常存放對象本身(注意不是對象指針),OC中使用allocnew創(chuàng)建的對象、C中使用malloc、calloc開辟的空間,都在堆區(qū)中。

全局區(qū)

全局區(qū)又稱靜態(tài)區(qū),在編譯時分配,此內(nèi)存中的數(shù)據(jù)一致存在,程序結(jié)束后由系統(tǒng)釋放。

全局區(qū)可以分為兩個兩個部分,分別是

  • 存放未初始化全局變量和靜態(tài)變量的BSS區(qū)
  • 存放已初始化全局變量和靜態(tài)變量的數(shù)據(jù)區(qū)

全局區(qū)存放靜態(tài)變量比如static修飾的變量

常量區(qū)

常量區(qū)是在編譯時分配的一塊內(nèi)存,程序結(jié)束后同樣由系統(tǒng)釋放。

常量區(qū)主要存放字符串常量

代碼區(qū)

代碼區(qū)是存放程序運行的二進(jìn)制代碼,由編譯時分配

棧幀(Stack Frame)

每一次函數(shù)的調(diào)用,都會在調(diào)用棧上維護(hù)一個獨立的空間,這個空間成為棧幀,當(dāng)前運行的函數(shù)總在棧頂,每個獨立的棧幀一般包括

  • 函數(shù)的返回地址和參數(shù)
  • 臨時變量:包括函數(shù)的非靜態(tài)局部變量和以及編譯器自動生成的其他臨時變量
  • 函數(shù)調(diào)用的上下文

靜態(tài)變量不添加到棧幀中

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在 iOS 開發(fā)中,內(nèi)存主要分為堆區(qū)、棧區(qū)、全局區(qū)、常量區(qū)、代碼區(qū)五大區(qū)域 堆(heap)區(qū) 是有程序員分配和釋放...
    遠(yuǎn)方竹葉閱讀 2,400評論 1 11
  • 從高地址向低地址排序: 棧區(qū)<運行時分配>: 特點:由編譯器自動完成分配和釋放,不需要程序員手動管理,主要存儲了函...
    wp_Demo閱讀 1,079評論 0 3
  • 在iOS中,內(nèi)存主要分為棧區(qū)、堆區(qū)、全局區(qū)、常量區(qū)、代碼區(qū)五大區(qū)域。如下圖所示 棧區(qū)(Stack) 定義 棧是系統(tǒng)...
    源本平凡閱讀 1,011評論 0 4
  • 總述 在iOS中,內(nèi)存主要分為棧區(qū)、堆區(qū)、全局區(qū)、常量區(qū)、代碼區(qū)五大區(qū)域。如下圖所示: 下面分別介紹這五大區(qū) 棧區(qū)...
    含笑州閱讀 533評論 0 2
  • iOS 底層原理 文章匯總[http://m.itdecent.cn/p/412b20d9a0f6] 在iO...
    Style_月月閱讀 4,816評論 9 20

友情鏈接更多精彩內(nèi)容