分類
記憶體泄露常發性
發生記憶體泄漏的代碼會被多次執行到,每次被執行的時候都會導致一塊記憶體泄漏。
偶發性
發生記憶體泄漏的代碼只有在某些特定環境或操作過程下才會發生。常發性和偶發性是相對的。對於特定的環境,偶發性的也許就變成了常發性的。所以測試環境和測試方法對檢測記憶體泄漏至關重要。
一次性
發生記憶體泄漏的代碼只會被執行一次,或者由於算法上的缺陷,導致總會有一塊且僅一塊記憶體發生泄漏。比如,在類的構造函式中分配記憶體,在析構函式中卻沒有釋放該記憶體,所以記憶體泄漏只會發生一次。
隱式
程式在運行過程中不停的分配記憶體,但是直到結束的時候才釋放記憶體。嚴格的說這裡並沒有發生記憶體泄漏,因為最終程式釋放了所有申請的記憶體。但是對於一個伺服器程式,需要運行幾天、幾周甚至幾個月,不及時釋放記憶體也可能導致最終耗盡系統的所有記憶體。所以,我們稱這類記憶體泄漏為隱式記憶體泄漏。
危害
從用戶使用程式的角度來看,記憶體泄漏本身不會產生什麼危害,作為一般的用戶,根本感覺不到記憶體泄漏的存在。真正有危害的是記憶體泄漏的堆積,這會最終消耗盡系統所有的記憶體。從這個角度來說,一次性記憶體泄漏並沒有什麼危害,因為它不會堆積,而隱式記憶體泄漏危害性則非常大,因為較之於常發性和偶發性記憶體泄漏它更難被檢測到。
表現
記憶體泄露檢測工具
記憶體泄露1.ccmalloc-Linux和Solaris下對C和C++程式的簡單的使用記憶體泄漏和malloc調試庫。
2.Dmalloc-DebugMallocLibrary.
3.ElectricFence-Linux分發版中由BrucePerens編寫的malloc調試庫。
4.Leaky-Linux下檢測記憶體泄漏的程式。
5.LeakTracer-Linux、Solaris和HP-UX下跟蹤和分析C++程式中的記憶體泄漏。
6.MEMWATCH-由JohanLindh編寫,是一個開放原始碼C語言記憶體錯誤檢測工具,主要是通過gcc的precessor來進行。7.Valgrind - DebuggingandprofilingLinuxprograms,aimingatprogramswritteninCandC++.8.KCachegrind-AvisualizationtoolfortheprofilingdatageneratedbyCachegrindandCalltree.
9.IBMRationalPurifyPlus-幫助開發人員查明C/C++、託管.NET、Java和VB6代碼中的性能和可靠性錯誤。PurifyPlus將記憶體錯誤和泄漏檢測、應用程式性能描述、代碼覆蓋分析等功能組合在一個單一、完整的工具包中。
10.ParasoftInsure++-針對C/C++套用的運行時錯誤自動檢測工具,它能夠自動監測C/C++程式,發現其中存在著的記憶體破壞、記憶體泄漏、指針錯誤和I/O等錯誤。並通過使用一系列獨特的技術(SCI技術和變異測試等),徹底的檢查和測試我們的代碼,精確定位錯誤的準確位置並給出詳細的診斷信息。能作為MicrosoftVisualC++的一個外掛程式運行。
11.CompuwareDevPartnerforVisualC++BoundsCheckerSuite-為C++開發者設計的運行錯誤檢測和調試工具軟體。作為MicrosoftVisualStudio和C++6.0的一個外掛程式運行。
12.ElectricSoftwareGlowCode-包括記憶體泄漏檢查,codeprofiler,函式調用跟蹤等功能。給C++和.Net開發者提供完整的錯誤診斷,和運行時性能分析工具包。
13.CompuwareDevPartnerJavaEdition-包含Java記憶體檢測,代碼覆蓋率測試,代碼性能測試,執行緒死鎖,分散式套用等幾大功能模組。
14.QuestJProbe-分析Java的記憶體泄漏。
15.ej-technologiesJProfiler-一個全功能的Java剖析工具,專用於分析J2SE和J2EE應用程式。它把CPU、執行緒和記憶體的剖析組合在一個強大的套用中。
16.BEAJRockit-用來診斷Java記憶體泄漏並指出根本原因,專門針對Intel平台並得到最佳化,能在Intel硬體上獲得最高的性能。

