如何减小内存碎片
內(nèi)存碎片?:
內(nèi)部碎片(占了不用)
內(nèi)部碎片就是已經(jīng)被分配出去(能明確指出屬于哪個(gè)進(jìn)程)卻不能被利用的內(nèi)存空間; 內(nèi)部碎片是處于區(qū)域內(nèi)部或頁(yè)面內(nèi)部的存儲(chǔ)塊。占有這些區(qū)域或頁(yè)面的進(jìn)程并不使用這個(gè)存儲(chǔ)塊。而在進(jìn)程占有這塊存儲(chǔ)塊時(shí),系統(tǒng)無(wú)法利用它。直到進(jìn)程釋放它,或進(jìn)程結(jié)束時(shí),系統(tǒng)才有可能利用這個(gè)存儲(chǔ)塊。 單道連續(xù)分配只有內(nèi)部碎片。多道固定連續(xù)分配既有內(nèi)部碎片,又有外部碎片。外部碎片(太小&不連續(xù) -》沒(méi)法用)
外部碎片指的是還沒(méi)有被分配出去(不屬于任何進(jìn)程),但由于太小了無(wú)法分配給申請(qǐng)內(nèi)存空間的新進(jìn)程的內(nèi)存空閑區(qū)域。 外部碎片是出于任何已分配區(qū)域或頁(yè)面外部的空閑存儲(chǔ)塊。這些存儲(chǔ)塊的總和可以滿足當(dāng)前申請(qǐng)的長(zhǎng)度要求,但是由于它們的地址不連續(xù)或其他原因,使得系統(tǒng)無(wú)法滿足當(dāng)前申請(qǐng)。 多道可變連續(xù)分配只有外部碎片。從編程層面來(lái)說(shuō):
1.盡可能少開(kāi)辟內(nèi)存空間,盡量復(fù)用內(nèi)存空間
2.使用完內(nèi)存空間后,盡快釋放掉。
3.合理使用Union可以減小內(nèi)存占用
4.合理安排struct或者class中的成員變量的位置
5.已知大小的數(shù)組靜態(tài)開(kāi)辟,未知大小的采用動(dòng)態(tài)開(kāi)辟
6.可以自己手動(dòng)維護(hù)內(nèi)存分配。(在申請(qǐng)的內(nèi)存很小時(shí) 有用)一次申請(qǐng)一大塊內(nèi)存,然后分成將其分成小塊,每次用的時(shí)候?qū)⑿K分配出去,釋放的時(shí)候大塊一起釋放。
比如說(shuō),在內(nèi)存單元100的起始地址到內(nèi)存單元200之間,一共申請(qǐng)了100塊1字節(jié)的區(qū)域,但是釋放的時(shí)候,先釋放了內(nèi)存地址為基數(shù)的單元,如釋放101、103...而偶數(shù)單元不釋放,釋放50次后,雖然還有50字節(jié)的內(nèi)存是空余的,但是如果下次要申請(qǐng)2字節(jié)的內(nèi)存單元,是無(wú)法在100到200之間申請(qǐng)到的,因?yàn)檫@個(gè)區(qū)域沒(méi)有連續(xù)的2字節(jié)空間,這就是內(nèi)存碎片。
從OS層來(lái)說(shuō):
1.段頁(yè)式內(nèi)存管理:?現(xiàn)在普遍采用的段頁(yè)式內(nèi)存分配方式就是將進(jìn)程的內(nèi)存區(qū)域分為不同的段,然后將每一段由多個(gè)固定大小的頁(yè)組成。通過(guò)頁(yè)表機(jī)制,使段內(nèi)的頁(yè)可以不必連續(xù)處于同一內(nèi)存區(qū)域,從而減少了外部碎片,然而同一頁(yè)內(nèi)仍然可能存在少量的內(nèi)部碎片,只是一頁(yè)的內(nèi)存空間本就較小,從而使可能存在的內(nèi)部碎片也較少。
轉(zhuǎn)載于:https://www.cnblogs.com/luntai/p/6287579.html
總結(jié)
- 上一篇: linux执行windows创建的脚本,
- 下一篇: linux mint 安装ssh