C語(yǔ)言 內(nèi)存丟失
因?yàn)閒ree()函數(shù)的用處在于實(shí)時(shí)執(zhí)行回收內(nèi)存的操作,如果程序簡(jiǎn)單,當(dāng)程序結(jié)束前不會(huì)使用過(guò)多內(nèi)存,也就不會(huì)降低系統(tǒng)性能,那么也可以不用free()函數(shù)去釋放內(nèi)存。當(dāng)程序結(jié)束后,操作系統(tǒng)會(huì)完成釋放的功能。
但如果在開(kāi)發(fā)大型程序時(shí)不寫(xiě)free()函數(shù)后果會(huì)很嚴(yán)重。因?yàn)榭赡茉诔绦蛑幸貜?fù)分配一萬(wàn)次10MB的內(nèi)存,如果每次分配內(nèi)存后都使用free()函數(shù)釋放用完的內(nèi)存空間。那么這個(gè)程序只需使用10MB內(nèi)存就可以運(yùn)行。但是如果不使用free()函數(shù),那么就要使用100GB的內(nèi)存!這其中包括絕大部分的虛擬內(nèi)存,而由于虛擬內(nèi)存的操作需要讀寫(xiě)磁盤(pán),會(huì)極大影響系統(tǒng)性能,甚至導(dǎo)致系統(tǒng)崩潰。
因此,在程序中編寫(xiě)malloc()函數(shù)分配內(nèi)存時(shí)都對(duì)應(yīng)地寫(xiě)出一個(gè)free()函數(shù)進(jìn)行釋放,是一個(gè)良好的編程習(xí)慣。這不但體現(xiàn)在處理大型程序時(shí)的必要性,也在一定程度上體現(xiàn)程序優(yōu)美的風(fēng)格和健壯性。
但是,有時(shí)常常會(huì)有將內(nèi)存丟失的情況,例如:
p01d=(int*)malloc(sizeof(int));
pNew=(int*)malloc(sizeof(int));
這兩段代碼分別表示創(chuàng)建了一塊內(nèi)存,并將內(nèi)存的地址傳給了指針pOld和pNew,此時(shí)指針pOld 和pNew分別指向兩塊內(nèi)存。如果進(jìn)行pOld=pNew操作,pOld指針就指向了pNew指向的指針地址。這時(shí)再進(jìn)行free(pOld);釋放內(nèi)存的操作,此時(shí)釋放pOld所指向的內(nèi)存空間是原來(lái)pNew指向的,于是這塊空間被釋放了。但是pOld原來(lái)指向的那塊內(nèi)存空間還沒(méi)有被釋放,不過(guò)因?yàn)闆](méi)有指針指向這塊內(nèi)存,所以這塊內(nèi)存就丟失了。
點(diǎn)擊加載更多評(píng)論>>