網站首頁 生活 健康 母嬰 情感 職場 休閒
當前位置:生活百科谷 > 科技 > 科技生活

內存溢出和內存泄漏的區別

欄目: 科技生活 / 發佈於: / 人氣:3.01W

品牌型號:華爲MateBook D15
系統:Windows 11

內存溢出和內存泄漏的區別

內存溢出是指程序在申請內存時,沒有足夠的內存空間供其使用,出現outofmemory;比如申請了一個integer,但給它存了long才能存下的數,那就是內存溢出。

內存泄露是指程序在申請內存後,無法釋放已申請的內存空間,一次內存泄露危害可以忽略,但內存泄露堆積後果很嚴重,無論多少內存,遲早會被佔光。

內存泄漏可以分爲4類:

1、常發性內存泄漏。發生內存泄漏的代碼會被多次執行到,每次被執行的時候都會導致一塊內存泄漏。

2、偶發性內存泄漏。發生內存泄漏的代碼只有在某些特定環境或操作過程下才會發生。常發性和偶發性是相對的。對於特定的環境,偶發性的也許就變成了常發性的。所以測試環境和測試方法對檢測內存泄漏至關重要。

3、一次性內存泄漏。發生內存泄漏的代碼只會被執行一次,或者由於算法上的缺陷,導致總會有一塊僅且一塊內存發生泄漏。比如,在類的構造函數中分配內存,在析構函數中卻沒有釋放該內存,所以內存泄漏只會發生一次。

4、隱式內存泄漏。程序在運行過程中不停的分配內存,但是直到結束的時候才釋放內存。嚴格的說這裏並沒有發生內存泄漏,因爲最終程序釋放了所有申請的內存。但是對於一個服務器程序,需要運行幾天,幾周甚至幾個月,不及時釋放內存也可能導致最終耗盡系統的所有內存。所以,我們稱這類內存泄漏爲隱式內存泄漏。