內(nèi)存泄漏指由于疏忽或錯誤造成程序未能釋放已經(jīng)不再使用的內(nèi)存的情況。內(nèi)存泄漏并非指內(nèi)存在物理上的消失,而是應用程序分配某段內(nèi)存后,由于設(shè)計錯誤,失去了對該段內(nèi)存的控制,因而造成了內(nèi)存的浪費。
成都創(chuàng)新互聯(lián)公司長期為上千多家客戶提供的網(wǎng)站建設(shè)服務,團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為科爾沁左翼企業(yè)提供專業(yè)的網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè),科爾沁左翼網(wǎng)站改版等技術(shù)服務。擁有10年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。
可以使用相應的軟件測試工具對軟件進行檢測。
1. ccmalloc——Linux和Solaris下對C和C++程序的簡單的使用內(nèi)存泄漏和malloc調(diào)試庫。
2. Dmalloc——Debug Malloc Library.
3. Electric
Fence——Linux分發(fā)版中由Bruce Perens編寫的malloc()調(diào)試庫。
4. Leaky——Linux下檢測內(nèi)存泄漏的程序。
5. LeakTracer——Linux、Solaris和HP-UX下跟蹤和分析C++程序中的內(nèi)存泄漏。
6. MEMWATCH——由Johan
Lindh編寫,是一個開放源代碼C語言內(nèi)存錯誤檢測工具,主要是通過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. Leak
Monitor——一個Firefox擴展,能找出跟Firefox相關(guān)的泄漏類型。
10. IE Leak Detector
(Drip/IE Sieve)——Drip和IE Sieve leak
detectors幫助網(wǎng)頁開發(fā)員提升動態(tài)網(wǎng)頁性能通過報告可避免的因為IE局限的內(nèi)存泄漏。
11. Windows Leaks
Detector——探測任何Win32應用程序中的任何資源泄漏(內(nèi)存,句柄等),基于Win API調(diào)用鉤子。
12. SAP Memory
Analyzer——是一款開源的JAVA內(nèi)存分析軟件,可用于輔助查找JAVA程序的內(nèi)存泄漏,能容易找到大塊內(nèi)存并驗證誰在一直占用它,它是基于Eclipse
RCP(Rich Client Platform),可以下載RCP的獨立版本或者Eclipse的插件。
13. DTrace——即動態(tài)跟蹤Dynamic
Tracing,是一款開源軟件,能在Unix類似平臺運行,用戶能夠動態(tài)檢測操作系統(tǒng)內(nèi)核和用戶進程,以更精確地掌握系統(tǒng)的資源使用狀況,提高系統(tǒng)性能,減少支持成本,并進行有效的調(diào)節(jié)。
14. IBM Rational PurifyPlus——幫助開發(fā)人員查明C/C++、托管。NET、Java和VB6代碼中的性能和可靠性錯誤。PurifyPlus
將內(nèi)存錯誤和泄漏檢測、應用程序性能描述、代碼覆蓋分析等功能組合在一個單一、完整的工具包中。
15. Parasoft Insure++——針對C/C++應用的運行時錯誤自動檢測工具,它能夠自動監(jiān)測C/C++程序,發(fā)現(xiàn)其中存在著的內(nèi)存破壞、內(nèi)存泄漏、指針錯誤和I/O等錯誤。并通過使用一系列獨特的技術(shù)(SCI技術(shù)和變異測試等),徹底的檢查和測試我們的代碼,精確定位錯誤的準確位置并給出詳細的診斷信息。能作為Microsoft
Visual C++的一個插件運行。
16. Compuware DevPartner for Visual C++ BoundsChecker
Suite——為C++開發(fā)者設(shè)計的運行錯誤檢測和調(diào)試工具軟件。作為Microsoft Visual Studio和C++ 6.0的一個插件運行。
17. Electric Software GlowCode——包括內(nèi)存泄漏檢查,code
profiler,函數(shù)調(diào)用跟蹤等功能。給C++和。Net開發(fā)者提供完整的錯誤診斷,和運行時性能分析工具包。
18. Compuware DevPartner Java
Edition——包含Java內(nèi)存檢測,代碼覆蓋率測試,代碼性能測試,線程死鎖,分布式應用等幾大功能模塊。
19. Quest JProbe——分析Java的內(nèi)存泄漏。
20. ej-technologies JProfiler——一個全功能的Java剖析工具,專用于分析J2SE和J2EE應用程序。它把CPU、執(zhí)行緒和內(nèi)存的剖析組合在一個強大的應用中。JProfiler可提供許多IDE整合和應用服務器整合用途。JProfiler直覺式的GUI讓你可以找到效能瓶頸、抓出內(nèi)存泄漏、并解決執(zhí)行緒的問題。4.3.2注冊碼:A-G666#76114F-1olm9mv1i5uuly#0126
21. BEA JRockit——用來診斷Java內(nèi)存泄漏并指出根本原因,專門針對Intel平臺并得到優(yōu)化,能在Intel硬件上獲得最高的性能。
22. SciTech Software AB .NET Memory
Profiler——找到內(nèi)存泄漏并優(yōu)化內(nèi)存使用針對C#,VB.Net,或其它。Net程序。
23. YourKit .NET Java Profiler——業(yè)界領(lǐng)先的Java和。NET程序性能分析工具。
24. AutomatedQA AQTime——AutomatedQA的獲獎產(chǎn)品performance profiling和memory
debugging工具集的下一代替換產(chǎn)品,支持Microsoft, Borland, Intel, Compaq 和
GNU編譯器??梢詾?。NET和Windows程序生成全面細致的報告,從而幫助您輕松隔離并排除代碼中含有的性能問題和內(nèi)存/資源泄露問題。支持。Net
1.0,1.1,2.0,3.0和Windows 32/64位應用程序。
25. JavaScript Memory Leak Detector——微軟全球產(chǎn)品開發(fā)歐洲團隊(Global Product
Development- Europe team, GPDE)
發(fā)布的一款調(diào)試工具,用來探測JavaScript代碼中的內(nèi)存泄漏,運行為IE系列的一個插件。
用gstack長期觀察函數(shù)調(diào)用棧,分析調(diào)用情況與內(nèi)存增長的關(guān)系,找到與內(nèi)存泄露相關(guān)的函數(shù),重點分析。
C語言是一門面向過程的、抽象化的通用程序設(shè)計語言,廣泛應用于底層開發(fā)。C語言能以簡易的方式編譯、處理低級存儲器。C語言是僅產(chǎn)生少量的機器語言以及不需要任何運行環(huán)境支持便能運行的高效率程序設(shè)計語言。
盡管C語言提供了許多低級處理的功能,但仍然保持著跨平臺的特性,以一個標準規(guī)格寫出的C語言程序可在包括類似嵌入式處理器以及超級計算機等作業(yè)平臺的許多計算機平臺上進行編譯。
C語言是一門面向過程的計算機編程語言,與C++、C#、Java等面向?qū)ο缶幊陶Z言有所不同。C語言的設(shè)計目標是提供一種能以簡易的方式編譯、處理低級存儲器、僅產(chǎn)生少量的機器碼以及不需要任何運行環(huán)境支持便能運行的編程語言。
C語言描述問題比匯編語言迅速、工作量小、可讀性好、易于調(diào)試、修改和移植,而代碼質(zhì)量與匯編語言相當。C語言一般只比匯編語言代碼生成的目標程序效率低10%-20%。因此,C語言可以編寫系統(tǒng)軟件。
for (i=0;i10;i++)
{
char *p=(char *)malloc(nSize *sizeof(char));
i++;
}
調(diào)用了10次malloc,就分配了10份空間,每次循環(huán),你之前分配空間的地址都會被新一次分配的地址覆蓋,繼而丟失了。
最后你只是釋放了一次,也就是9次都丟失了,造成內(nèi)存泄露
一般我們常說的內(nèi)存泄漏是指堆內(nèi)存的泄漏。堆內(nèi)存是指程序從堆中分配的,大小任意的(內(nèi)存塊的大小可以在程序運行期決定),使用完后必須顯式釋放的內(nèi)存。應用程序一般使用malloc,realloc,new等函數(shù)從堆中分配到一塊內(nèi)存,使用完后,程序必須負責相應的調(diào)用free或delete釋放該內(nèi)存塊,否則,這塊內(nèi)存就不能被再次使用,我們就說這塊內(nèi)存泄漏了。以下這段小程序演示了堆內(nèi)存發(fā)生泄漏的情形:
void MyFunction(int nSize)
{
char* p= new char[nSize];
if( !GetStringFrom( p, nSize ) ){
MessageBox(“Error”);
return;
}
…//using the string pointed by p;
delete[] p;
}
當函數(shù)GetStringFrom()返回零的時候,指針p指向的內(nèi)存就不會被釋放。這是一種常見的發(fā)生內(nèi)存泄漏的情形。程序在入口處分配內(nèi)存,在出口處釋放內(nèi)存,但是c函數(shù)可以在任何地方退出,所以一旦有某個出口處沒有釋放應該釋放的內(nèi)存,就會發(fā)生內(nèi)存泄漏。
1. ccmalloc-Linux和Solaris下對C和C++程序的簡單的使用內(nèi)存泄漏和malloc調(diào)試庫。
2. Dmalloc-Debug Malloc Library.
3. Electric Fence-Linux分發(fā)版中由Bruce Perens編寫的malloc()調(diào)試庫。
4. Leaky-Linux下檢測內(nèi)存泄漏的程序。
5. LeakTracer-Linux、Solaris和HP-UX下跟蹤和分析C++程序中的內(nèi)存泄漏。
6. MEMWATCH-由Johan Lindh編寫,是一個開放源代碼C語言內(nèi)存錯誤檢測工具,主要是通過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 Cachegrindand Calltree.
9. Leak Monitor-一個Firefox擴展,能找出跟Firefox相關(guān)的泄漏類型。
10. IE Leak Detector (Drip/IE Sieve)-Drip和IE Sieve leak detectors幫助網(wǎng)頁開發(fā)員提升動態(tài)網(wǎng)頁性能通過報告可避免的因為IE局限的內(nèi)存泄漏。
11. Windows Leaks Detector-探測任何Win32應用程序中的任何資源泄漏(內(nèi)存,句柄等),基于Win API調(diào)用鉤子。
12. SAP Memory Analyzer-是一款開源的JAVA內(nèi)存分析軟件,可用于輔助查找JAVA程序的內(nèi)存泄漏,能容易找到大塊內(nèi)存并驗證誰在一直占用它,它是基于Eclipse RCP(Rich Client Platform),可以下載RCP的獨立版本或者Eclipse的插件。
13. DTrace-即動態(tài)跟蹤Dynamic Tracing,是一款開源軟件,能在Unix類似平臺運行,用戶能夠動態(tài)檢測操作系統(tǒng)內(nèi)核和用戶進程,以更精確地掌握系統(tǒng)的資源使用狀況,提高系統(tǒng)性能,減少支持成本,并進行有效的調(diào)節(jié)。
14. IBM Rational PurifyPlus-幫助開發(fā)人員查明C/C++、托管.NET、Java和VB6代碼中的性能和可靠性錯誤。PurifyPlus 將內(nèi)存錯誤和泄漏檢測、應用程序性能描述、代碼覆蓋分析等功能組合在一個單一、完整的工具包中。
15. Parasoft Insure++-針對C/C++應用的運行時錯誤自動檢測工具,它能夠自動監(jiān)測C/C++程序,發(fā)現(xiàn)其中存在著的內(nèi)存破壞、內(nèi)存泄漏、指針錯誤和I/O等錯誤。并通過使用一系列獨特的技術(shù)(SCI技術(shù)和變異測試等),徹底的檢查和測試我們的代碼,精確定位錯誤的準確位置并給出詳細的診斷信息。能作為Microsoft Visual C++的一個插件運行。
16. Compuware DevPartner for Visual C++ BoundsChecker Suite-為C++開發(fā)者設(shè)計的運行錯誤檢測和調(diào)試工具軟件。作為Microsoft Visual Studio和C++ 6.0的一個插件運行。
17. Electric Software GlowCode-包括內(nèi)存泄漏檢查,code profiler,函數(shù)調(diào)用跟蹤等功能。給C++和.Net開發(fā)者提供完整的錯誤診斷,和運行時性能分析工具包。
18. Compuware DevPartner Java Edition-包含Java內(nèi)存檢測,代碼覆蓋率測試,代碼性能測試,線程死鎖,分布式應用等幾大功能模塊。
19. Quest JProbe-分析Java的內(nèi)存泄漏。
20. ej-technologies JProfiler-一個全功能的Java剖析工具,專用于分析J2SE和J2EE應用程序。它把CPU、執(zhí)行緒和內(nèi)存的剖析組合在一個強大的應用中。JProfiler可提供許多IDE整合和應用服務器整合用途。JProfiler直覺式的GUI讓你可以找到效能瓶頸、抓出內(nèi)存泄漏、并解決執(zhí)行緒的問題。4.3.2注冊碼:A-G666#76114F-1olm9mv1i5uuly#0126
21. BEA JRockit-用來診斷Java內(nèi)存泄漏并指出根本原因,專門針對Intel平臺并得到優(yōu)化,能在Intel硬件上獲得最高的性能。
22. SciTech Software AB .NET Memory Profiler-找到內(nèi)存泄漏并優(yōu)化內(nèi)存使用針對C#,VB.Net,或其它.Net程序。
23. YourKit .NET Java Profiler-業(yè)界領(lǐng)先的Java和.NET程序性能分析工具。
24. AutomatedQA AQTime-AutomatedQA的獲獎產(chǎn)品performance profiling和memory debugging工具集的下一代替換產(chǎn)品,支持Microsoft, Borland, Intel, Compaq 和 GNU編譯器。可以為.NET和Windows程序生成全面細致的報告,從而幫助您輕松隔離并排除代碼中含有的性能問題和內(nèi)存/資源泄露問題。支持.Net 1.0,1.1,2.0,3.0和Windows 32/64位應用程序。
25. JavaScript Memory Leak Detector-微軟全球產(chǎn)品開發(fā)歐洲團隊(Global Product Development- Europe team, GPDE) 發(fā)布的一款調(diào)試工具,用來探測JavaScript代碼中的內(nèi)存泄漏,運行為IE系列的一個插件。