iOS內(nèi)存分布

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

 棧區(qū)(stack)
 堆區(qū)(heap)
 全局/靜態(tài)區(qū)(bss)
 文字/常量區(qū)(data)
 代碼區(qū)(code)

棧區(qū)(stack)

  • 棧又稱堆棧, 是用戶存放程序臨時創(chuàng)建的局部變量,也就是說我們函數(shù)括弧“{}” 中定義的變量(但不包括static聲明的變量,static意味著在數(shù)據(jù)段中存放變量)。除此以外, 在函數(shù)被調(diào)用時,其參數(shù)也會被壓入發(fā)起調(diào)用的進(jìn)程棧中,并且待到調(diào)用結(jié)束后,函數(shù)的返回值 也會被存放回棧中徒扶。由于棧的后進(jìn)先出特點(diǎn),所以 棧特別方便用來保存/恢復(fù)調(diào)用現(xiàn)場胶台。從這個意義上講,我們可以把堆椏牡溃看成一個寄存根灯、交換臨時數(shù)據(jù)的內(nèi)存區(qū)毕源。
  • 指針都存在棧區(qū)岸更,用于指向分配在堆區(qū)的內(nèi)存的地址醇疼。
int a = 10;
// a指針地址是在棧區(qū)的 0x7xxxx
NSLog(@"a=%d,a地址:%p",a,&a); 
NSObject *obj = [NSObject new]; // 對象 --
NSLog(@"obj對象-%@硕并,obj指針地址:%p",obj,&obj); // 0x6 堆

打印結(jié)果:

a=10, a地址:0x7ffee2acc1ec
obj對象-<NSObject: 0x600000fbc270>,obj指針地址:0x7ffee2acc1e0
//對象的內(nèi)存地址和對象指針的內(nèi)存地址不是同一個
//而且obj的指針地址0x7xxxx在棧區(qū)秧荆,對象是在堆區(qū)0x6xxxx
//一般情況0x7xxxx 就是棧區(qū)倔毙,0x6xxxx就是堆區(qū)

堆區(qū)(heap)

  • 堆是用于存放進(jìn)程運(yùn)行中被動態(tài)分配的內(nèi)存段,它的大小并不固定,可動態(tài)擴(kuò)張或縮減。當(dāng)進(jìn)程調(diào)用malloc等函數(shù)分配內(nèi)存時,新分配的內(nèi)存就被動態(tài)添加到堆上(堆被擴(kuò)張); 當(dāng)利用free等函數(shù)釋放內(nèi)存時,被釋放的內(nèi)存從堆中被剔除(堆被縮減)
  • 堆向高地址擴(kuò)展的數(shù)據(jù)結(jié)構(gòu)辰如,是不連續(xù)的內(nèi)存區(qū)域普监。程序員負(fù)責(zé)在何時釋放內(nèi)存(如用free或delete),在iOS的ARC程序中琉兜,系統(tǒng)自動管理計數(shù)器凯正,計數(shù)器為0的時候,在當(dāng)次的runloop結(jié)束后豌蟋,釋放掉內(nèi)存廊散。堆中的所有東西都是匿名的,這樣不能按名字訪問梧疲,而只能通過指針訪問允睹。
  • 對于堆來講,頻繁的new/delete勢必會造成內(nèi)存空間的不連續(xù)性,從而造成大量的碎片 ,使程序效率降低幌氮。

全局/靜態(tài)區(qū)(bss)

  • bss段通常是指用來存放程序中未初始化的全局變量和靜態(tài)變量的一塊內(nèi)存區(qū)域缭受。
  • 通常來說如果不初始化全局變量和靜態(tài)變量,編譯器也會對它們進(jìn)行一個隱式初始化(直接賦值就是顯示初始化)该互,賦給它們一個缺省值米者,是我們這里所說的未初始化。
  • bss段在程序執(zhí)行之前會清0宇智,所以未初始化的全局變量(靜態(tài)變量)已經(jīng)是0了蔓搞。所以這種情況還是存放在BSS段,一旦初始化就會從BSS段中回收掉随橘,轉(zhuǎn)存到data段(數(shù)據(jù)段)中喂分。
  • bss區(qū)-Block Started by Symbol(未初始化數(shù)據(jù)段):并不給該段的數(shù)據(jù)分配空間,僅僅是記錄了數(shù)據(jù)所需空間的大小机蔗。

文字/常量區(qū)(data)

  • 數(shù)據(jù)段分為只讀數(shù)據(jù)段(常量區(qū))讀寫數(shù)據(jù)段
  • 通常是指用來存放程序中已經(jīng)初始化的全局變量和靜態(tài)變量的一塊內(nèi)存區(qū)域蒲祈。數(shù)據(jù)段屬于靜態(tài)內(nèi)存分配,可以分為只讀數(shù)據(jù)段和讀寫數(shù)據(jù)段甘萧。字符串常量等,是放在只讀數(shù)據(jù)段中,結(jié)束程序時才會被收回讳嘱。

代碼區(qū)(code)

  • 通常是指用來存放程序執(zhí)行代碼的一塊內(nèi)存區(qū)域幔嗦。這部分區(qū)域的大小在程序運(yùn)行前就已經(jīng)確定,并且內(nèi)存區(qū)域通常屬于只讀, 某些架構(gòu)也允許代碼段為可寫,即允許修改程序酿愧。在代碼段中,也有可能包含一些只讀的常數(shù)變量,例如字符串常量等,這些常量放在只讀數(shù)據(jù)段(data segment)中沥潭,也有叫做常量區(qū)的說法。


    內(nèi)存分布圖
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末嬉挡,一起剝皮案震驚了整個濱河市钝鸽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌庞钢,老刑警劉巖拔恰,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異基括,居然都是意外死亡颜懊,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門风皿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來河爹,“玉大人,你說我怎么就攤上這事桐款∠陶猓” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵魔眨,是天一觀的道長媳维。 經(jīng)常有香客問我,道長遏暴,這世上最難降的妖魔是什么侄刽? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮朋凉,結(jié)果婚禮上州丹,老公的妹妹穿的比我還像新娘。我一直安慰自己侥啤,他們只是感情好当叭,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著盖灸,像睡著了一般蚁鳖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上赁炎,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天醉箕,我揣著相機(jī)與錄音钾腺,去河邊找鬼。 笑死讥裤,一個胖子當(dāng)著我的面吹牛放棒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播己英,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼间螟,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了损肛?” 一聲冷哼從身側(cè)響起厢破,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎治拿,沒想到半個月后摩泪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡劫谅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年见坑,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片捏检。...
    茶點(diǎn)故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡荞驴,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出未檩,到底是詐尸還是另有隱情戴尸,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布冤狡,位于F島的核電站孙蒙,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏悲雳。R本人自食惡果不足惜挎峦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望合瓢。 院中可真熱鬧坦胶,春花似錦、人聲如沸晴楔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽税弃。三九已至纪岁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間则果,已是汗流浹背幔翰。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工漩氨, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人遗增。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓叫惊,卻偏偏與公主長得像,于是被迫代替她去往敵國和親做修。 傳聞我的和親對象是個殘疾皇子霍狰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評論 2 344