什么是內存泄漏?
什么是內存泄漏?
指因為疏忽或錯誤造成程序未能釋放已經不再使用的內存的情況。內存泄漏并不是指內存在物理上的消失,而是應用程序分配某段內存后,因為設計錯誤,失去了對該段內存的控制,因而造成了內存的浪費。
根據發生的方式來進行分類的話,內存泄漏可以分為4類:
1.常發性內存泄漏:發生內存泄漏的代碼會被多次執行到,每次執行都會導致一塊內存的泄漏。
2.偶發性內存泄漏:發生內存泄漏的代碼只有在特定的環境或者操作過程下才會發生。 常發性和偶發性是相對的。 對于特定的環境,偶發性的也就編程常發性的。所以測試環境和測試方法對檢測內存泄漏至關重要。
3.一次性內存泄漏:發生內存泄漏的代碼只會被執行一次,或者由于算法上的缺陷,導致總會有一塊且僅有一塊內存發生泄漏。比如在類的構建函數中分配內存,在析構函數中卻沒有釋放該內存,所以內存泄漏只會發生一次。
4.隱士內存泄漏:程序運行過程中不停的分配內存,直到程序結束才能夠釋放內存。嚴格的說這并沒有發生內存泄漏,因為程序最終釋放了所申請的內存。但是對于一個服務器程序,可能需要運行 幾天,幾周,幾月,甚至幾年。如果不及時的釋放內存,系統的內存資源最終都會被消耗完。so我們稱這種的為隱士的內存泄漏。對于用戶來說內存泄漏沒什么影響,因為他們并不在乎。而且一般的用戶根本也感受不到這個東西。真正有害的是內存泄漏的堆積,因為這最終會消耗盡所有的系統資源。 從這個角度來說的話,一次性內存泄漏,其實并沒有什么危害,因為他不會大量的堆積。而隱式內存泄漏則危害最大。因為較之于常發性或偶發性的內存泄漏。他更加的難以被發現。
指因為疏忽或錯誤造成程序未能釋放已經不再使用的內存的情況。內存泄漏并不是指內存在物理上的消失,而是應用程序分配某段內存后,因為設計錯誤,失去了對該段內存的控制,因而造成了內存的浪費。
根據發生的方式來進行分類的話,內存泄漏可以分為4類:
1.常發性內存泄漏:發生內存泄漏的代碼會被多次執行到,每次執行都會導致一塊內存的泄漏。
2.偶發性內存泄漏:發生內存泄漏的代碼只有在特定的環境或者操作過程下才會發生。 常發性和偶發性是相對的。 對于特定的環境,偶發性的也就編程常發性的。所以測試環境和測試方法對檢測內存泄漏至關重要。
3.一次性內存泄漏:發生內存泄漏的代碼只會被執行一次,或者由于算法上的缺陷,導致總會有一塊且僅有一塊內存發生泄漏。比如在類的構建函數中分配內存,在析構函數中卻沒有釋放該內存,所以內存泄漏只會發生一次。
4.隱士內存泄漏:程序運行過程中不停的分配內存,直到程序結束才能夠釋放內存。嚴格的說這并沒有發生內存泄漏,因為程序最終釋放了所申請的內存。但是對于一個服務器程序,可能需要運行 幾天,幾周,幾月,甚至幾年。如果不及時的釋放內存,系統的內存資源最終都會被消耗完。so我們稱這種的為隱士的內存泄漏。對于用戶來說內存泄漏沒什么影響,因為他們并不在乎。而且一般的用戶根本也感受不到這個東西。真正有害的是內存泄漏的堆積,因為這最終會消耗盡所有的系統資源。 從這個角度來說的話,一次性內存泄漏,其實并沒有什么危害,因為他不會大量的堆積。而隱式內存泄漏則危害最大。因為較之于常發性或偶發性的內存泄漏。他更加的難以被發現。