動(dòng)態(tài)分配內(nèi)存的危險(xiǎn)(淺)

1、內(nèi)存泄漏。
原因:代碼中的錯(cuò)誤導(dǎo)致。
2、內(nèi)存碎片。
原因:動(dòng)態(tài)分配內(nèi)存時(shí)內(nèi)存使用不當(dāng)導(dǎo)致的。

內(nèi)存泄漏:
使用new分配空間時(shí),最后沒有用delete釋放它,導(dǎo)致它一直占用內(nèi)存,發(fā)生內(nèi)存泄漏。
例如,如果丟失了已經(jīng)分配內(nèi)存的堆內(nèi)存地址,因?yàn)楦膶懥擞糜谠L問它的指針中的地址。這是一個(gè)很常見的問題,比如循環(huán)中,不斷向內(nèi)存空間申請(qǐng)內(nèi)存,在內(nèi)存空間中消耗內(nèi)存的越來越多,在分配完空間后,再次申請(qǐng)內(nèi)存時(shí),出現(xiàn)錯(cuò)誤,申請(qǐng)內(nèi)存失敗。
解決或者說避免這個(gè)問題的辦法,就是在用new分配完空間后,在恰當(dāng)?shù)奈恢冕尫艃?nèi)存。那什么是恰當(dāng)?shù)奈恢茫壳‘?dāng)?shù)奈恢镁褪窃谶@塊內(nèi)存使用完,后面不再使用它時(shí),將他釋放。
拿指針舉個(gè)例子,指針是有作用域的,作用域范圍是從定義它的地址開始,到他結(jié)束,用完后這個(gè)指針就不存在了,但他所占的內(nèi)存仍然存在,如果不及時(shí)的釋放他,他就會(huì)一直占用內(nèi)存,所以在指針的作用域結(jié)束的地方用delete釋放他就行。

內(nèi)存碎片:
內(nèi)部碎片就是已經(jīng)被分配出去(能明確指出屬于哪個(gè)進(jìn)程)卻不能被利用的內(nèi)存空間。

(1)、內(nèi)部產(chǎn)生的碎片
內(nèi)存分配必須起始于可被 4、8 或 16 整除,這就導(dǎo)致,我在申請(qǐng)23個(gè)內(nèi)存時(shí),電腦會(huì)給我批下24個(gè)內(nèi)存,然后我還不用那1個(gè)內(nèi)存,導(dǎo)致出現(xiàn)多個(gè)1內(nèi)存。這一個(gè)內(nèi)存就是多余的空間,叫做內(nèi)部碎片。

(2)、外部產(chǎn)生的碎片
頻繁的分配與回收物理頁面會(huì)導(dǎo)致大量的、連續(xù)且小的頁面塊夾雜在已分配的頁面中間,就會(huì)產(chǎn)生外部碎片。
如圖:

自由儲(chǔ)存區(qū)的碎片

但這個(gè)問題少見,只需稍加知道即可。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • C語言中內(nèi)存分配 在任何程序設(shè)計(jì)環(huán)境及語言中,內(nèi)存管理都十分重要。在目前的計(jì)算機(jī)系統(tǒng)或嵌入式系統(tǒng)中,內(nèi)存資源仍然是...
    一生信仰閱讀 1,193評(píng)論 0 2
  • (JG-2014-08-20)(前半部分經(jīng)過網(wǎng)上多篇文章對(duì)比整理)(后半部分根據(jù)ExceptionalCpp、C+...
    JasonGao閱讀 5,628評(píng)論 2 23
  • 前言 因?yàn)閚ode絕大多數(shù)時(shí)間都是運(yùn)行在后端的服務(wù)器程序,因此,需要精確控制內(nèi)存。在以前,js程序員不需要控制內(nèi)存...
    白昔月閱讀 5,721評(píng)論 5 11
  • 被文同時(shí)發(fā)布在CSDN上,歡迎查看。 APP內(nèi)存的使用,是評(píng)價(jià)一款應(yīng)用性能高低的一個(gè)重要指標(biāo)。雖然現(xiàn)在智能手機(jī)的內(nèi)...
    大圣代閱讀 4,854評(píng)論 2 54
  • __block和__weak修飾符的區(qū)別其實(shí)是挺明顯的:1.__block不管是ARC還是MRC模式下都可以使用,...
    LZM輪回閱讀 3,364評(píng)論 0 6