iOS程序內(nèi)存分配

iOS程序所占的內(nèi)存分區(qū)

  • 棧區(qū):

    • 存放函數(shù)的參數(shù)值废恋,局部變量的值扒寄,基本數(shù)據(jù)類型等
    • 由編譯器自動分配釋放拟烫,不需要程序猿管理棧內(nèi)存
    • 存放的數(shù)據(jù)變量遵循先進(jìn)后出,且棧地址是從高到低分配
  • 堆區(qū):

    • OC中用alloc函數(shù)生成的對象都是放在堆區(qū)
    • 堆區(qū)的內(nèi)存一般由程序猿進(jìn)行釋放上渴,如果不釋放喜颁,程序運行結(jié)束后由系統(tǒng)進(jìn)行回收
    • 堆區(qū)存放數(shù)據(jù)遵循先進(jìn)先出,地址是從低到高
  • 全局區(qū)/靜態(tài)區(qū)(static):

    • 全局變量和靜態(tài)變量的存儲是放在一塊的半开,初始化的全局變量和靜態(tài)變量在一塊區(qū)域,
      未初始化的全局變量和未初始化的靜態(tài)變量在相鄰的另一塊區(qū)域寂拆,
    • 程序結(jié)束后由系統(tǒng)進(jìn)行釋放
    • eg:int a;未初始化的。int a = 10;已初始化的
  • 常量區(qū):

    • 常量字符串就是放在這里的纠永。 程序結(jié)束后由系統(tǒng)釋放
  • 代碼區(qū):

    • 存放函數(shù)體的二進(jìn)制代碼

代碼示例講述

這是一個前輩寫的,非常詳細(xì) 

//main.cpp 
int a = 0; 全局初始化區(qū) 
char *p1; 全局未初始化區(qū) 
main() 
{ 
int b; 棧 
char s[] = "abc"; 棧 
char *p2; 棧 
char *p3 = "123456"; 123456\0在常量區(qū)涉波,p3在棧上炭序。 
static int c =0; 全局(靜態(tài))初始化區(qū) 
p1 = (char *)malloc(10); 
p2 = (char *)malloc(20); 
分配得來得10和20字節(jié)的區(qū)域就在堆區(qū)惭聂。 
strcpy(p1, "123456"); 123456\0放在常量區(qū)。 
}

如下圖所示:代碼區(qū)存放于低地址辜纲,棧區(qū)存放于高地址,且區(qū)與區(qū)之間并不是連續(xù)的


image

注意事項:

  • 在iOS中屋摇,堆區(qū)的內(nèi)存是應(yīng)用程序共享的幽邓,而堆區(qū)的內(nèi)存分配是由系統(tǒng)負(fù)責(zé)的
  • 當(dāng)一個app啟動后火脉,代碼區(qū)柒啤,常量區(qū)畸颅,全局區(qū)大小已固定担巩,因此指向這些區(qū)的指針不會產(chǎn)
    生崩潰性的錯誤。而堆區(qū)和棧區(qū)是時時刻刻變化的(堆的創(chuàng)建銷毀涛癌,棧的彈入彈出)送火,所
    以當(dāng)使用一個指針指向這兩個區(qū)里面的內(nèi)存時,一定要注意內(nèi)存是否已經(jīng)被釋放种吸,否則會
    產(chǎn)生程序崩潰(也即是野指針報錯)

堆區(qū)和棧區(qū)的比較

1.按照管理方式:

  • 棧:系統(tǒng)編譯器管理,不需要程序猿管理
  • 堆:釋放工作由程序員手動管理镜盯,不及時回收容易產(chǎn)生內(nèi)存泄露

2.按照分配方式:

  • 棧:靜態(tài)分配和動態(tài)分配
    • 靜態(tài)分配:靜態(tài)分配是系統(tǒng)編譯器完成的猖败,比如局部變量的分配
    • 動態(tài)分配:動態(tài)分配是有alloc函數(shù)進(jìn)行分配的,但是棧的動態(tài)分配和堆是不同的激涤,它
      的動態(tài)分配也由系統(tǒng)編譯進(jìn)行釋放判呕,不需要程序員手動管理
  • 堆:堆是動態(tài)分配和回收內(nèi)存的,沒有靜態(tài)分配的堆

堆區(qū)的一個例子

創(chuàng)建一個新的對象時侠草,對象p指針存放在棧區(qū),p將指向在堆區(qū)開辟的一塊存儲空間Person


image

在程序結(jié)束之前晤碘,p對象必須release功蜓,不然系統(tǒng)不知道釋放堆區(qū)的Person內(nèi)存。

如果p對象沒有release式撼,只是p=nil; 就是p指針指向了堆區(qū)地址為0的地方,那么原來的Person永遠(yuǎn)無法再次訪問扰楼,而且也無法釋放掉。

堆是所有程序共享的內(nèi)存弦赖,當(dāng)N個這樣的內(nèi)存得不到釋放,堆區(qū)會被擠爆沼沈,程序立馬癱瘓币厕。這就是內(nèi)存泄漏。

參考①:http://www.cnblogs.com/hangdada/p/4982989.html

參考②:http://www.tuicool.com/articles/RbA3imB

參考③:http://my.oschina.net/jlongtian/blog/596698

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末访递,一起剝皮案震驚了整個濱河市同辣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌旱函,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件踪古,死亡現(xiàn)場離奇詭異券腔,居然都是意外死亡,警方通過查閱死者的電腦和手機纷纫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進(jìn)店門辱魁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人染簇,你說我怎么就攤上這事±猓” “怎么了?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵十绑,是天一觀的道長酷勺。 經(jīng)常有香客問我,道長扳躬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任击胜,我火速辦了婚禮役纹,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘促脉。我一直安慰自己,他們只是感情好宫仗,可當(dāng)我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布旁仿。 她就那樣靜靜地躺著,像睡著了一般枯冈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上滩褥,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天罪既,我揣著相機與錄音,去河邊找鬼丢间。 笑死,一個胖子當(dāng)著我的面吹牛烘挫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播饮六,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼卤橄,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了窟扑?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤橘霎,失蹤者是張志新(化名)和其女友劉穎殖属,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體洗显,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡墙懂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了碧库。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡嵌灰,死狀恐怖颅悉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情剩瓶,我是刑警寧澤,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布豌鹤,位于F島的核電站枝缔,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏灵临。R本人自食惡果不足惜截型,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一宦焦、第九天 我趴在偏房一處隱蔽的房頂上張望睁搭。 院中可真熱鬧赶诊,春花似錦园骆、人聲如沸寓调。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽痛悯。三九已至,卻和暖如春载萌,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背扭仁。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工乖坠, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留搀突,地道東北人熊泵。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓顽分,卻偏偏與公主長得像徐许,于是被迫代替她去往敵國和親怯邪。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內(nèi)容