內(nèi)存處理的另一個(gè)方面是垃圾回收。在支持垃圾回收的環(huán)境中,程序員幾乎不用顯式地釋放與對(duì)象關(guān)聯(lián)的內(nèi)存。運(yùn)行時(shí)庫會(huì)在某時(shí)刻自動(dòng)清理沒有任何引用的對(duì)象。
與C#和Java不一樣,在C++語言中沒有內(nèi)建垃圾回收。在現(xiàn)代C++中,使用智能指針關(guān)聯(lián)內(nèi)存,在舊代碼中,則在對(duì)象層次通過new和delete管理內(nèi)存。在C++中可以實(shí)現(xiàn)垃圾回收,但將自己從釋放內(nèi)存的任務(wù)中解放出來可能又會(huì)引入新的麻煩。
標(biāo)記和清掃是一種垃圾回收的方法。使用這種方法的垃圾回收器定期檢查程序中的每個(gè)指針,并將標(biāo)記引用的內(nèi)存標(biāo)記為仍在使用。在每一輪周期結(jié)束時(shí),未標(biāo)記視為沒有在使用,因而被釋放。
如果愿意執(zhí)行以下操作,那么可以在C++中實(shí)現(xiàn)標(biāo)記和清掃算法:
?。?)在垃圾回收器中注冊所有指針,這樣垃圾回收器可以輕松遍歷所以指針。
?。?)讓所有對(duì)象都從一個(gè)混入類中派生,這個(gè)混入類可能是GarbageCoolectible,允許垃圾回收器將對(duì)象標(biāo)記為正在使用中。
?。?)確保在垃圾回收器運(yùn)行時(shí)不能修改指針,從而保護(hù)對(duì)象的并發(fā)訪問。
可以看出,這個(gè)垃圾回收方法需要程序員付出很多努力,甚至可能比使用delete更容易出錯(cuò)。人們已經(jīng)嘗試在C++中實(shí)現(xiàn)安全簡單的垃圾回收機(jī)制,但是就算C++中出現(xiàn)了完美的垃圾回收機(jī)制,它也不一定適用于所有應(yīng)用程序。垃圾回收存在以下缺點(diǎn):
當(dāng)垃圾回收器正在運(yùn)行時(shí),程序可能停止響應(yīng)。
使用垃圾回收器時(shí),析構(gòu)函數(shù)具有不確定性。由于對(duì)象在被垃圾回收之前不會(huì)銷毀,所以對(duì)象離開作用域時(shí)不會(huì)立即執(zhí)行析構(gòu)函數(shù)。這意味著,由析構(gòu)函數(shù)完成的清理資源操作關(guān)閉文件,釋放鎖等要在將來某個(gè)不確定的時(shí)刻進(jìn)行。
★關(guān)于WorkWin公司電腦監(jiān)控軟件★
WorkWin的使命是打造Work用途的Windows 電腦系統(tǒng),有效規(guī)范員工上網(wǎng)行為,讓老板知道員工每天在做什么(監(jiān)控包括屏幕、上網(wǎng)在內(nèi)的一舉一動(dòng)),限制員工不能做什么(禁止網(wǎng)購、游戲、優(yōu)盤等)。
WorkWin基于純軟件設(shè)計(jì),非常容易使用,無需添加或改動(dòng)任何硬件,使用一臺(tái)管理機(jī)監(jiān)控全部員工機(jī)電腦。歷經(jīng)南京網(wǎng)亞十余年精心打造,此時(shí)此刻每天都有成千上萬企業(yè)電腦正在運(yùn)行WorkWin,選擇WorkWin選擇“贏”。
WorkWin監(jiān)控首頁 短視頻講解 下載免費(fèi)試用版
版權(quán)所有,南京網(wǎng)亞計(jì)算機(jī)有限公司 。本文鏈接地址: 內(nèi)存程序處理垃圾回收