iOS程序運行過程中的內(nèi)存分配和分區(qū)

  1. RAM ROM
      RAM:運行內(nèi)存,不能掉電存儲彤蔽。ROM:存儲性內(nèi)存,可以掉電存儲庙洼,例如內(nèi)存卡顿痪、Flash。
    由于RAM類型不具備掉電存儲能力(即一掉電數(shù)據(jù)消失)油够,所以app程序一般存放于ROM中蚁袭。RAM的訪問速度要遠高于ROM,價格也要高石咬。
  2. App程序啟動
    App程序啟動揩悄,系統(tǒng)會把開啟的那個App程序從Flash或ROM里面拷貝到內(nèi)存(RAM),然后從內(nèi)存里面執(zhí)行代碼鬼悠。
    另一個原因是CPU不能直接從內(nèi)存卡里面讀取指令(需要Flash驅(qū)動等等)删性。
  3. 內(nèi)存分區(qū):
    • 棧區(qū)(stack):
      存放的局部變量亏娜、先進后出、一旦出了作用域就會被銷毀蹬挺;函數(shù)跳轉(zhuǎn)地址维贺,現(xiàn)場保護等; 程序猿不需要管理棧區(qū)變量的內(nèi)存(棧區(qū)地址從高到低分配)
  • 堆區(qū)(heap):
    堆區(qū)的內(nèi)存分配使用的是alloc巴帮;
    需要程序猿管理內(nèi)存幸缕;ARC的內(nèi)存的管理,是編譯器再編譯的時候自動添加 retain晰韵、release发乔、autorelease;(堆區(qū)的地址是從低到高分配)

  • 全局區(qū)/靜態(tài)區(qū)(static):
    包括兩個部分:未初始化過 雪猪、初始化過,也就是說栏尚,(全局區(qū)/靜態(tài)區(qū))在內(nèi)存中是放在一起的,初始化的全局變量和靜態(tài)變量在一塊區(qū)域只恨, 未初始化的全局變量和未初始化的靜態(tài)變量在相鄰的另一塊區(qū)域译仗;
    eg:int a;未初始化的。int a = 10;已初始化的官觅。

  • 常量區(qū):常量字符串就是放在這里纵菌;

  • 代碼區(qū): 存放App代碼;

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

內(nèi)存分配和分區(qū)

4 . 注意事項

在iOS中功氨,堆區(qū)的內(nèi)存是應(yīng)用程序共享的序苏,堆中的內(nèi)存分配是系統(tǒng)負(fù)責(zé)的;
系統(tǒng)使用一個鏈表來維護所有已經(jīng)分配的內(nèi)存空間(系統(tǒng)僅僅紀(jì)錄捷凄,并不管理具體的內(nèi)容)忱详;
變量使用結(jié)束后,需要釋放內(nèi)存跺涤,OC中是根據(jù)引用計數(shù)==0匈睁,就說明沒有任何變量使用該空間,那么系統(tǒng)將直接收回桶错;
當(dāng)一個app啟動后航唆,代碼區(qū),常量區(qū)牛曹,全局區(qū)大小已固定佛点,因此指向這些區(qū)的指針不會產(chǎn)生崩潰性的錯誤醇滥。而堆區(qū)和棧區(qū)是時時刻刻變化的(堆的創(chuàng)建銷毀黎比,棧的彈入彈出)超营,所以當(dāng)使用一個指針指向這兩個區(qū)里面的內(nèi)存時,一定要注意內(nèi)存是否已經(jīng)被釋放阅虫,否則會產(chǎn)生程序崩潰(也即是野指針報錯)演闭。

5 . 其它操作系統(tǒng)
  iOS是基于UNIX、Android是基于Linux的颓帝,在Linux和unix系統(tǒng)中米碰,內(nèi)存管理的方式基本相同;
Android應(yīng)用程序的內(nèi)存分配也是如此购城。除此以外吕座,這些應(yīng)用層的程序使用的都是虛擬內(nèi)存,它們都是建立在操作系統(tǒng)之上的瘪板,只有開發(fā)底層驅(qū)動或板級支持包時才會接觸到物理內(nèi)存吴趴,
舉例:在嵌入式Linux中,實際的物理地址只有64M甚至更小侮攀,但是虛擬內(nèi)存卻可以高達4G;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末锣枝,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子兰英,更是在濱河造成了極大的恐慌撇叁,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件畦贸,死亡現(xiàn)場離奇詭異陨闹,居然都是意外死亡,警方通過查閱死者的電腦和手機薄坏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進店門正林,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人颤殴,你說我怎么就攤上這事觅廓。” “怎么了涵但?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵杈绸,是天一觀的道長。 經(jīng)常有香客問我矮瘟,道長瞳脓,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任澈侠,我火速辦了婚禮劫侧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己烧栋,他們只是感情好写妥,可當(dāng)我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著审姓,像睡著了一般珍特。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上魔吐,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天扎筒,我揣著相機與錄音,去河邊找鬼酬姆。 笑死嗜桌,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的辞色。 我是一名探鬼主播症脂,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼淫僻!你這毒婦竟也來了诱篷?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤雳灵,失蹤者是張志新(化名)和其女友劉穎棕所,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體悯辙,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡琳省,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了躲撰。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片针贬。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖拢蛋,靈堂內(nèi)的尸體忽然破棺而出桦他,到底是詐尸還是另有隱情,我是刑警寧澤谆棱,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布快压,位于F島的核電站,受9級特大地震影響垃瞧,放射性物質(zhì)發(fā)生泄漏蔫劣。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一个从、第九天 我趴在偏房一處隱蔽的房頂上張望脉幢。 院中可真熱鬧歪沃,春花似錦、人聲如沸嫌松。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽豆瘫。三九已至,卻和暖如春菊值,著一層夾襖步出監(jiān)牢的瞬間外驱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工腻窒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留昵宇,地道東北人。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓儿子,卻偏偏與公主長得像瓦哎,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子柔逼,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,562評論 2 349

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