內(nèi)存泄漏是指你向系統(tǒng)申請分配內(nèi)存進(jìn)行使用(new),可是使用完了以后卻不歸還(delete),結(jié)果你申請到的那塊內(nèi)存你自己也不能再訪問(也許你把它的地址給弄丟了)荧止,而系統(tǒng)也不能再次將它分配給需要的程序吹泡。
內(nèi)存泄漏可以分為4類:
1. 常發(fā)性內(nèi)存泄漏。發(fā)生內(nèi)存泄漏的代碼會(huì)被多次執(zhí)行到器瘪,每次被執(zhí)行的時(shí)候都會(huì)導(dǎo)致一塊內(nèi)存泄漏翠储。
2. 偶發(fā)性內(nèi)存泄漏。發(fā)生內(nèi)存泄漏的代碼只有在某些特定環(huán)境或操作過程下才會(huì)發(fā)生橡疼。常發(fā)性和偶發(fā)性是相對的援所。對于特定的環(huán)境,偶發(fā)性的也許就變成了常發(fā)性的欣除。所以測試環(huán)境和測試方法對檢測內(nèi)存泄漏至關(guān)重要住拭。
3. 一次性內(nèi)存泄漏。發(fā)生內(nèi)存泄漏的代碼只會(huì)被執(zhí)行一次,或者由于算法上的缺陷滔岳,導(dǎo)致總會(huì)有一塊僅且一塊內(nèi)存發(fā)生泄漏杠娱。比如,在類的構(gòu)造函數(shù)中分配內(nèi)存澈蟆,在析構(gòu)函數(shù)中卻沒有釋放該內(nèi)存墨辛,所以內(nèi)存泄漏只會(huì)發(fā)生一次。
4. 隱式內(nèi)存泄漏趴俘。程序在運(yùn)行過程中不停的分配內(nèi)存睹簇,但是直到結(jié)束的時(shí)候才釋放內(nèi)存。嚴(yán)格的說這里并沒有發(fā)生內(nèi)存泄漏寥闪,因?yàn)樽罱K程序釋放了所有申請的內(nèi)存太惠。但是對于一個(gè)服務(wù)器程序,需要運(yùn)行幾天疲憋,幾周甚至幾個(gè)月凿渊,不及時(shí)釋放內(nèi)存也可能導(dǎo)致最終耗盡系統(tǒng)的所有內(nèi)存。所以缚柳,我們稱這類內(nèi)存泄漏為隱式內(nèi)存泄漏埃脏。