色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費(fèi)注冊(cè)]

您的位置:電子發(fā)燒友網(wǎng)>源碼下載>通訊/手機(jī)編程>

iOS系統(tǒng)為一個(gè)APP分配的內(nèi)存

大?。?/span>0.3 MB 人氣: 2017-09-25 需要積分:1

下圖是iOS系統(tǒng)為一個(gè)APP分配的內(nèi)存,如下:

iOS系統(tǒng)為一個(gè)APP分配的內(nèi)存

內(nèi)存分類(RAM、ROM

RAM:運(yùn)行內(nèi)存,不能掉電儲(chǔ)存;

ROM:儲(chǔ)存性內(nèi)存,可以掉電儲(chǔ)存,例如:內(nèi)存卡,flash;

RAM的訪問速度要遠(yuǎn)高于ROM,價(jià)格也要高;

CPU只能從RAM直接讀取指令;

app程序一般存放于ROM中。啟動(dòng)app時(shí),系統(tǒng)會(huì)把開啟的app程序從ROM中轉(zhuǎn)移到RAM中。

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

iOS中主要是棧區(qū)(stack)、堆區(qū)(heap)、全局區(qū)/靜態(tài)區(qū)(staic) ;

棧區(qū)

存放局部變量,先進(jìn)后出,一旦出了作用域就會(huì)被銷毀,函數(shù)跳轉(zhuǎn)地址,現(xiàn)場(chǎng)保護(hù)等

棧區(qū)的地址從高到低分配

堆區(qū)

堆區(qū)的內(nèi)存分配使用的是alloc;

堆區(qū)的地址是從低到高分配;

ARC原理是基于堆區(qū),編譯器在編譯的時(shí)候給對(duì)象自動(dòng)添加retain,release,autorelease;

在ios中,堆區(qū)的內(nèi)存是應(yīng)用程序共享的,堆中的內(nèi)存分配是系統(tǒng)負(fù)責(zé)的;

全局區(qū)

包括2個(gè)部分:未初始化和初始化; 也是說,在內(nèi)存中是放在一起的,比如:int a;未初始化, int a = 10 初始化的 2者都在全局區(qū)/靜態(tài)區(qū);

常量區(qū):常量字符串及時(shí)放在這里的;

代碼區(qū):存放app代碼;

tips:

堆區(qū)需要程序猿管理內(nèi)存,是由alloc分配的內(nèi)存,一般速度比較慢,容易產(chǎn)生內(nèi)存碎片;

棧區(qū)不需要程序猿管理內(nèi)存,由編譯器自動(dòng)分配并釋放,速度快;

當(dāng)一個(gè)app啟動(dòng)后,代碼區(qū),常量區(qū),全局區(qū)大小都是已經(jīng)固定的,因此指向這些區(qū)的指針不會(huì)產(chǎn)生崩潰性的錯(cuò)誤,而堆區(qū)和棧區(qū)是時(shí)時(shí)刻刻變化的(堆得創(chuàng)建和銷毀,棧的彈入和彈出),所以當(dāng)使用一個(gè)指針指向這個(gè)2區(qū)里面內(nèi)存的時(shí)候,一定要注意內(nèi)存是否已經(jīng)被釋放,否則會(huì)產(chǎn)生程序崩潰(即野指針報(bào)錯(cuò))

iOS的內(nèi)存管理

這里按照蘋果文檔所述,重點(diǎn)對(duì)堆內(nèi)存分配整理下。

首先,iOS和其它系統(tǒng)一樣,內(nèi)存分頁,每頁4K。多個(gè)頁構(gòu)成一個(gè)region統(tǒng)一管理,負(fù)責(zé)管理的對(duì)象是VM object,其中包含了pager、size、resident pages等諸多屬性。不管是Objective-C的[NSObject alloc],還是C代碼的對(duì)內(nèi)存分配,最終重任都會(huì)落到malloc庫上,釋放也是如此,最終都將使用malloc庫中的free()。

malloc庫中有很多malloc的同族函數(shù)可以動(dòng)態(tài)分配內(nèi)存,會(huì)結(jié)合參數(shù)在free pages中進(jìn)行最適分配。如果分配的內(nèi)存比較大,可以直接使用vm_allocate,得到一個(gè)VM對(duì)象(與Linux類似),這個(gè)在實(shí)際使用前不分配物理內(nèi)存。malloc的內(nèi)部實(shí)現(xiàn)都是開源的,感興趣的可以去了解去看。

此外,對(duì)于malloc,還有一個(gè)Zone的概念(貌似與Linux的概念不完全相同),可以簡(jiǎn)單理解為一組free page單元,可以統(tǒng)一管理操作。默認(rèn)情況,在第一次調(diào)用malloc時(shí),系統(tǒng)會(huì)生成一個(gè)default zone,后續(xù)的默認(rèn)分配在此進(jìn)行。比如,malloc_zone_xxx()函數(shù)都是對(duì)特定的zone進(jìn)行分配操作,執(zhí)行zone-》xxx()。

最后強(qiáng)調(diào)一下iOS特別需要注意的點(diǎn):

當(dāng)前的主流iPhone實(shí)際物理內(nèi)存都不超過1G,可以說不算大。不過和Android機(jī)比起來,我不得不為蘋果的設(shè)計(jì)稱贊,1G空間利用得如此高效,性能不差,也控制了發(fā)熱。

iOS引用計(jì)數(shù)原理

- 引用計(jì)數(shù)機(jī)制只使用在堆中,那么所有不保存在堆中的數(shù)據(jù)的引用計(jì)數(shù)都為-1。

- 在OC中幾乎所有不可變對(duì)象(常量)都存在常量區(qū),內(nèi)存管理由系統(tǒng)來做,引用計(jì)數(shù)為-1。

- 對(duì)象引用計(jì)數(shù)降至0,那么對(duì)象所在的內(nèi)存也許會(huì)回收。

- retain 遞增引用計(jì)數(shù)

- release 遞減引用計(jì)數(shù)

- autorelease 清理「自動(dòng)釋放池」時(shí),在遞減保留計(jì)數(shù)

非常好我支持^.^

(0) 0%

不好我反對(duì)

(0) 0%

      發(fā)表評(píng)論

      用戶評(píng)論
      評(píng)價(jià):好評(píng)中評(píng)差評(píng)

      發(fā)表評(píng)論,獲取積分! 請(qǐng)遵守相關(guān)規(guī)定!

      ?
      主站蜘蛛池模板: 国产午夜精品美女免费大片| 一级毛片免费视频网站| 青青伊人久久| 男生射女生| 免费人妻AV无码专区五月| 麻豆一区二区免费播放网站| 久久成人免费观看草草影院| 精品香蕉99久久久久网站 | 日本午夜视频在线| 欧美 亚洲 日韩 中文2019| 91在线一区二区| 伊人青青久| 中文无码熟妇人妻AV在线| 中文字幕在线不卡精品视频99| 越南女子杂交内射BBWXZ| 影音先锋 av天堂| 约艺术院校96年清纯白嫩| 嘴巴舔着她的私处插| 97国产视频| FREE乌克兰嫩交HD| 丰满人妻按磨HD| 国产三级在线精品男人的天堂| 黄色大片久久| 久久亚洲伊人| 欧美深深色噜噜狠狠yyy| 日本伦子欲| 午夜伦yy44880影院| 亚洲精品久久久午夜福利电影网 | 美女打开双腿扒开屁股男生| 猫咪av永久最新域名| 男女免费观看在线爽爽爽视频| 欧美男男网站免费观看videos| 漂亮的保姆5电影免费观看完整版中文| 欧美疯狂做受xxxxx喷水| 日韩欧美视频一区| 迅雷成人下载| 越南美女内射BBWXZ| 99视频一区| 国产精品久久久久久久久爆乳 | 国产午夜精品不卡视频| 久久99国产视频|