當前位置:編程學習大全網 - 熱門推薦 - 電腦內存泄漏是怎麽回事

電腦內存泄漏是怎麽回事

cpu資源耗盡:估計是機器沒有反應了,鍵盤,鼠標,以及網絡等等。這個在windows上經常看見,特別是中了毒。

進程id耗盡:沒法創建新的進程了,串口或者telnet都沒法創建了。

硬盤耗盡: 機器要死了,交換內存沒法用,日誌也沒法用了,死是很正常的。

內存泄漏或者內存耗盡:新的連接無法創建,free的內存比較少。發生內存泄漏的程序很多,但是要想產生壹定的後果,就需要這個進程是無限循環的,是個服務進程。當然,內核也是無限循環的,所以,如果內核發生了內存泄漏,情況就更加不妙。內存泄漏是壹種很難定位和跟蹤的錯誤,目前還沒看到有什麽好用的工具(當然,用戶空間有壹些工具,有靜態分析的,也會動態分析的,但是找內核的內存泄漏,沒有好的開源工具)

內存泄漏和對象的引用計數有很大的關系,再加上c/c++都沒有自動的垃圾回收機制,如果沒有手動釋放內存,問題就會出現。如果要避免這個問題,還是要從代碼上入手,良好的編碼習慣和規範,是避免錯誤的不二法門。

壹般我們常說的內存泄漏是指堆內存的泄漏。

堆內存是指程序從堆中分配的,大小任意的(內存塊的大小可以在程序運行期決定),使用完後必須顯示釋放的內存。

應用程序壹般使用malloc,realloc,new等函數從堆中分配到壹塊內存,使用完後,程序必須負責相應的調用free或delete釋放該內存塊,否則,這塊內存就不能被再次使用,我們就說這塊內存泄漏了。

(附)部分內存泄漏檢測工具

1.ccmalloc-Linux和Solaris下對C和C++程序的簡單的使用內存泄漏和malloc調試庫。

2.Dmalloc-Debug Malloc Library.

3.Electric Fence-Linux分發版中由Bruce Perens編寫的malloc()調試庫。

4.Leaky-Linux下檢測內存泄漏的程序。

5.LeakTracer-Linux、Solaris和HP-UX下跟蹤和分析C++程序中的內存泄漏。

6.MEMWATCH-由Johan Lindh編寫,是壹個開放源代碼C語言內存錯誤檢測工具,主要是通過gcc的precessor來進行。

7.Valgrind-Debugging and profiling Linux programs, aiming at programs written in C and C++.

8.KCachegrind-A visualization tool for the profiling data generated by Cachegrind and Calltree.

9.IBM Rational PurifyPlus-幫助開發人員查明C/C++、托管.NET、Java和VB6代碼中的性能和可靠性錯誤。PurifyPlus 將內存錯誤和泄漏檢測、應用程序性能描述、代碼覆蓋分析等功能組合在壹個單壹、完整的工具包中。

10.Parasoft Insure++-針對C/C++應用的運行時錯誤自動檢測工具,它能夠自動監測C/C++程序,發現其中存在著的內存破壞、內存泄漏、指針錯誤和I/O等錯誤。並通過使用壹系列獨特的技術(SCI技術和變異測試等),徹底的檢查和測試我們的代碼,精確定位錯誤的準確位置並給出詳細的診斷信息。能作為Microsoft Visual C++的壹個插件運行。

11.Compuware DevPartner for Visual C++ BoundsChecker Suite-為C++開發者設計的運行錯誤檢測和調試工具軟件。作為Microsoft Visual Studio和C++ 6.0的壹個插件運行。

12.Electric Software GlowCode-包括內存泄漏檢查,code profiler,函數調用跟蹤等功能。給C++和.Net開發者提供完整的錯誤診斷,和運行時性能分析工具包。

13.Compuware DevPartner Java Edition-包含Java內存檢測,代碼覆蓋率測試,代碼性能測試,線程死鎖,分布式應用等幾大功能模塊。

14.Quest JProbe-分析Java的內存泄漏。

15.ej-technologies JProfiler-壹個全功能的Java剖析工具,專用於分析J2SE和J2EE應用程序。它把CPU、執行緒和內存的剖析組合在壹個強大的應用中。

16.BEA JRockit-用來診斷Java內存泄漏並指出根本原因,專門針對Intel平臺並得到優化,能在Intel硬件上獲得最高的性能。

  • 上一篇:戴爾1400筆記本有多大升級空間
  • 下一篇:誰可以推薦壹些動漫歌曲
  • copyright 2024編程學習大全網