內(nèi)存泄漏也稱作“存儲滲漏”,用動態(tài)存儲分配函數(shù)動態(tài)開辟的空間,在使用完畢后未釋放,結(jié)果導(dǎo)致一直占據(jù)該內(nèi)存單元。直到程序結(jié)束。有人比喻是“操作系統(tǒng)可提供給所有進(jìn)程的存儲空間正在被某個進(jìn)程榨干”,最終結(jié)果是程序運行時間越長,占用存儲空間越來越多,最終用盡全部存儲空間,整個系統(tǒng)崩潰。
內(nèi)存溢出導(dǎo)致藍(lán)屏
所以“內(nèi)存泄漏”是從操作系統(tǒng)的角度來看的。這里的存儲空間并不是指物理內(nèi)存,而是指虛擬內(nèi)存大小,這個虛擬內(nèi)存大小取決于磁盤交換區(qū)設(shè)定的大小。由程序申請的一塊內(nèi)存,如果沒有任何一個指針指向它,那么這塊內(nèi)存就泄漏了。那么,遭遇內(nèi)存又和內(nèi)存溢出有什么不同?
從用戶使用程序的角度來看,內(nèi)存泄漏本身不會產(chǎn)生什么危害,作為一般的用戶,根本感覺不到內(nèi)存泄漏的存在。真正有危害的是內(nèi)存泄漏的堆積,這會最終消耗盡系統(tǒng)所有的內(nèi)存。從這個角度來說,一次性內(nèi)存泄漏并沒有什么危害,因為它不會堆積,而隱式內(nèi)存泄漏危害性則非常大,因為較之于常發(fā)性和偶發(fā)性內(nèi)存泄漏它更難被檢測到。
什么是偶發(fā)性和常發(fā)性內(nèi)存泄露?
所謂偶發(fā)性內(nèi)存泄露是指,發(fā)生內(nèi)存泄漏的代碼只有在某些特定環(huán)境或操作過程下才會發(fā)生。常發(fā)性和偶發(fā)性是相對的。對于特定的環(huán)境,偶發(fā)性的也許就變成了常發(fā)性的。所以測試環(huán)境和測試方法對檢測內(nèi)存泄漏至關(guān)重要。發(fā)生內(nèi)存泄漏的代碼會被多次執(zhí)行到,每次被執(zhí)行的時候都會導(dǎo)致一塊內(nèi)存泄漏。
內(nèi)存泄漏的危害
資源耗盡后,系統(tǒng)會反應(yīng)十分緩慢,因為無法有空閑內(nèi)存創(chuàng)建新的進(jìn)程,無法及時響應(yīng)用戶操作,這種癥狀看起來和系統(tǒng)中病毒有點類似。
內(nèi)存泄露的危害
用戶可以使用專門的內(nèi)存泄露檢測工具來檢測是否出現(xiàn)內(nèi)存泄露。
內(nèi)存溢出是指程序要求的內(nèi)存,超出了系統(tǒng)所能分配的范圍,從而發(fā)生溢出。
內(nèi)存溢是指在一個域中輸入的數(shù)據(jù)超過它的要求而且沒有對此作出處理引發(fā)的數(shù)據(jù)溢出問題,多余的數(shù)據(jù)就可以作為指令在計算機上運行。通常在運行大型軟件或游戲時,軟件或游戲所需要的內(nèi)存遠(yuǎn)遠(yuǎn)超出了你主機內(nèi)安裝的內(nèi)存所承受大小,就叫內(nèi)存溢出。此時軟件或游戲就運行不了,系統(tǒng)會提示內(nèi)存溢出,有時候會自動關(guān)閉軟件,重啟電腦或者軟件后釋放掉一部分內(nèi)存又可以正常運行該軟件或游戲一段時間。
總之,內(nèi)存泄漏是指程序由于錯誤或漏洞造成的內(nèi)存占用過多,或占用內(nèi)存后無法釋放。內(nèi)存溢出則是指已有的數(shù)據(jù)超過了其獲得到的內(nèi)存所能存儲的范圍。