【iOS】內(nèi)存中的幾大區(qū)域

一苔巨、幾大內(nèi)存區(qū)域介紹

內(nèi)存主要分為棧區(qū)、堆區(qū)废离、全局區(qū)恋拷、文字常量區(qū)、代碼區(qū)等五大區(qū)域厅缺。如圖所示蔬顾,代碼區(qū)存放于低地址段,棧區(qū)存放于高地址段湘捎,區(qū)與區(qū)之間并不是連續(xù)的诀豁。

image.png

1.棧區(qū)(stack)由編譯器自動分配并釋放,存放的是函數(shù)的參數(shù)值窥妇,局部變量等舷胜,方法調(diào)用的實參也是保存在棧區(qū)的。棧是系統(tǒng)數(shù)據(jù)結(jié)構(gòu),對應(yīng)線程/進程是唯一的烹骨。主要存放一些基本類型的變量和對象引用類型翻伺。

2.堆區(qū)(heap)由程序員分配和釋放,如果程序員不釋放沮焕,可能會出現(xiàn)內(nèi)存泄露吨岭,程序結(jié)束的時候,可能會由操作系統(tǒng)回收峦树。堆空間的分配總是動態(tài)的辣辫,不同堆分配的內(nèi)存無法互相操作。雖然程序結(jié)束的時候所有的數(shù)據(jù)空間都會被釋放回系統(tǒng)魁巩,但是精確的申請內(nèi)存急灭,釋放內(nèi)存匹配是良好程序的基本要素。主要存放用new構(gòu)造的對象和數(shù)組谷遂。

3.全局區(qū)(靜態(tài)區(qū)) (static) 全局變量和靜態(tài)變量的存儲是放在一起的葬馋,初始化的全局變量和靜態(tài)變量存放在一塊區(qū)域,未初始化的全局變量和靜態(tài)變量在相鄰的另一塊區(qū)域肾扰,程序結(jié)束后有系統(tǒng)釋放畴嘶。

4.文字常量區(qū) 存放常量字符串,程序結(jié)束后由系統(tǒng)釋放白对;

5.代碼區(qū) 存放函數(shù)的二進制代碼

二、堆區(qū)和棧區(qū)對比

1换怖、各自的優(yōu)缺點甩恼?

棧:由編譯器自動分配并釋放,速度較快沉颂,不會產(chǎn)生內(nèi)存碎片条摸。優(yōu)點是快速高效,缺點時有限制铸屉,數(shù)據(jù)不靈活钉蒲。

堆:由程序員分配和釋放,速度比較慢彻坛,而且容易產(chǎn)生內(nèi)存碎片顷啼,不過用起來最方便。優(yōu)點是靈活方便昌屉,數(shù)據(jù)適應(yīng)面廣泛钙蒙,但是效率有一定降低。

2间驮、申請后的系統(tǒng)是如何響應(yīng)的躬厌?

棧:存儲每一個函數(shù)在執(zhí)行的時候都會向操作系統(tǒng)索要資源,棧區(qū)就是函數(shù)運行時的內(nèi)存竞帽,棧區(qū)中的變量由編譯器負責分配和釋放扛施,內(nèi)存隨著函數(shù)的運行分配鸿捧,隨著函數(shù)的結(jié)束而釋放,由系統(tǒng)自動完成疙渣。只要棧的剩余空間大于所申請空間匙奴,系統(tǒng)將為程序提供內(nèi)存,否則將報異常提示棧溢出昌阿。

堆:操作系統(tǒng)有一個記錄空閑內(nèi)存地址的鏈表饥脑。當系統(tǒng)收到程序的申請時,會遍歷該鏈表懦冰,尋找第一個空間大于所申請空間的堆結(jié)點灶轰,然后將該結(jié)點從空閑結(jié)點鏈表中刪除,并將該結(jié)點的空間分配給程序刷钢。由于找到的堆結(jié)點的大小不一定正好等于申請的大小笋颤,系統(tǒng)會自動的將多余的那部分重新放入空閑鏈表中。

3内地、申請大小的限制是怎樣的伴澄?

棧:棧是向低地址擴展的數(shù)據(jù)結(jié)構(gòu),是一塊連續(xù)的內(nèi)存的區(qū)域阱缓。是棧頂?shù)牡刂泛蜅5淖畲笕萘渴窍到y(tǒng)預(yù)先規(guī)定好的非凌,棧的大小是2M(也有的說是1M,總之是一個編譯時就確定的常數(shù) ) 荆针,如果申請的空間超過棧的剩余空間時敞嗡,將提示overflow。因此航背,能從棧獲得的空間較小喉悴。

堆:堆是向高地址擴展的數(shù)據(jù)結(jié)構(gòu),是不連續(xù)的內(nèi)存區(qū)域玖媚。這是由于系統(tǒng)是用鏈表來存儲的空閑內(nèi)存地址的箕肃,自然是不連續(xù)的,而鏈表的遍歷方向是由低地址向高地址今魔。堆的大小受限于計算機系統(tǒng)中有效的虛擬內(nèi)存勺像。由此可見,堆獲得的空間比較靈活错森,也比較大咏删。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市问词,隨后出現(xiàn)的幾起案子督函,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辰狡,死亡現(xiàn)場離奇詭異锋叨,居然都是意外死亡,警方通過查閱死者的電腦和手機宛篇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門娃磺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人叫倍,你說我怎么就攤上這事偷卧。” “怎么了吆倦?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵听诸,是天一觀的道長。 經(jīng)常有香客問我蚕泽,道長晌梨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任须妻,我火速辦了婚禮仔蝌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘荒吏。我一直安慰自己敛惊,他們只是感情好,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布绰更。 她就那樣靜靜地躺著瞧挤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪动知。 梳的紋絲不亂的頭發(fā)上皿伺,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天员辩,我揣著相機與錄音盒粮,去河邊找鬼。 笑死奠滑,一個胖子當著我的面吹牛丹皱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播宋税,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼摊崭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了杰赛?” 一聲冷哼從身側(cè)響起呢簸,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后根时,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瘦赫,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年蛤迎,在試婚紗的時候發(fā)現(xiàn)自己被綠了确虱。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡替裆,死狀恐怖校辩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情辆童,我是刑警寧澤宜咒,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站胸遇,受9級特大地震影響荧呐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜纸镊,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一倍阐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧逗威,春花似錦峰搪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至罐呼,卻和暖如春鞠柄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背嫉柴。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工厌杜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人计螺。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓夯尽,卻偏偏與公主長得像,于是被迫代替她去往敵國和親登馒。 傳聞我的和親對象是個殘疾皇子匙握,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345