1、堆(heap)區(qū)
是有程序員分配和釋放,用于存放運(yùn)行中被動(dòng)態(tài)分配的內(nèi)存段。大小不定,可增加和縮減。
1)不連續(xù)的內(nèi)存區(qū)域
2)向高地址擴(kuò)展的數(shù)據(jù)結(jié)構(gòu)
3)遵循先進(jìn)先出(FIFO)原則
OC?程序中使用?alloc、new?創(chuàng)建的對象、C?語言中使用?malloc、?calloc、realloc?分配的空間是在堆上,需要手動(dòng)釋放或者由垃圾回收機(jī)制來回收。
優(yōu)點(diǎn)
靈活方便,隨取隨用
缺點(diǎn):
? ??需要手動(dòng)管理,效率低,容易產(chǎn)生內(nèi)存碎片。
? ??訪問堆中的內(nèi)存時(shí),一般需要先通過對象讀取到棧區(qū)的指針地址,然后通過指針地址訪問堆區(qū)。
棧(stack)區(qū)
棧是由編譯器分配和釋放,用于存放程序臨時(shí)創(chuàng)建的變量、函數(shù)的參數(shù)、局部變量等。
特點(diǎn)
1)是一塊連續(xù)的內(nèi)存區(qū)域
2)遵循先進(jìn)后出的原則
3)向低地址的數(shù)據(jù)結(jié)構(gòu)
優(yōu)點(diǎn)
棧是由編譯器分配和釋放,不會(huì)產(chǎn)生內(nèi)存碎片,快速高效
缺點(diǎn)
內(nèi)存大小有限制(iOS 主線程、其他線程以及 Mac)相關(guān)說明在?Stack space?查閱
由于函數(shù)運(yùn)行而臨時(shí)占用的內(nèi)存區(qū)域
全局(靜態(tài))區(qū)
全局區(qū)是編譯時(shí)分配的內(nèi)存空間,在程序運(yùn)行過程中,此內(nèi)存中的數(shù)據(jù)一直存在,程序結(jié)束后由系統(tǒng)釋放。static?修飾的變量始終保存到常量區(qū)。
數(shù)據(jù)區(qū):用來存放可執(zhí)行文件中已經(jīng)初始化的全局變量,也就是用來存放靜態(tài)分配的變量和全局變量(.data)
BSS區(qū):包含了程序中未初始化的全局變量。
常量區(qū)
是編譯時(shí)分配的內(nèi)存空間,在程序結(jié)束后由系統(tǒng)釋放。存放的是常量,是一塊特殊的區(qū)域。
代碼區(qū)
用來存放函數(shù)的二進(jìn)制代碼,它是可執(zhí)行程序在內(nèi)存中的鏡像。代碼段需要防止在運(yùn)行時(shí)被非法修改,只允許讀操作,不允許寫操作