发布时间:2020-06-20 13:00:23
内存洩漏是一種很難定位和跟蹤的錯誤,那麽内存洩露的原因是什麽呢?下面是生活日記小編精心爲你整理的c内存洩露的原因,一起來看看。
c内存洩露的原因簡單的說就是申請了一塊内存空間,使用完畢後沒有釋放掉。它的一般表現方式是程序運行時間越長,占用内存越多,最終用盡全部内存,整個系統崩潰。由程序申請的一塊内存,且沒有任何一個指針指向它,那麽這塊内存就洩露了。
(1). 常發性内存洩漏。
發生内存洩漏的代碼會被多次執行到,每次被執行的時候都會導緻一塊内存洩漏。
(2). 偶發性内存洩漏。
發生内存洩漏的代碼隻有在某些特定環境或操作過程下才會發生。常發性和偶發性是相對的。對于特定的環境,偶發性的也許就變成了常發性的。所以測試環境和測試方法對檢測内存洩漏至關重要。
(3). 一次性内存洩漏。
發生内存洩漏的代碼隻會被執行一次,或者由于算法上的缺陷,導緻總會有一塊僅且一塊内存發生洩漏。比如,在類的構造函數中分配内存,在析構函數中卻沒有釋放該内存,所以内存洩漏隻會發生一次。
(4). 隐式内存洩漏。
程序在運行過程中不停的分配内存,但是直到結束的時候才釋放内存。嚴格的說這裏并沒有發生内存洩漏,因爲最終程序釋放了所有申請的内存。但是對于一個服務器程序,需要運行幾天,幾周
周甚至幾個月,不及時釋放内存也可能導緻最終耗盡系統的所有内存。所以,我們稱這類内存洩漏爲隐式内存洩漏。
c内存洩露的表現cpu資源耗盡:估計是機器沒有反應了,鍵盤,鼠标,以及網絡等等。這個在windows上經常看見,特别是中了毒。
進程id耗盡:沒法創建新的進程了,串口或者telnet都沒法創建了。
硬盤耗盡: 機器要死了,交換内存沒法用,日志也沒法用了,死是很正常的。
内存洩漏或者内存耗盡:新的連接無法創建,free的内存比較少。發生内存洩漏的程序很多,但是要想産生一定的後果,就需要這個進程是無限循環的,是個服務進程。當然,内核也是無限循環的,所以,如果内核發生了内存洩漏,情況就更加不妙。内存洩漏是一種很難定位和跟蹤的錯誤,目前還沒看到有什麽好用的工具(當然,用戶空間有一些工具,有靜态分析的,也會動态分析的,但是找内核的内存洩漏,沒有好的開源工具)
内存洩漏和對象的引用計數有很大的關系,再加上c/c 都沒有自動的垃圾回收機制,如果沒有手動釋放内存,問題就會出現。如果要避免這個問題,還是要從代碼上入手,良好的編碼習慣和規範,是避免錯誤的不二法門。
一般我們常說的内存洩漏是指堆内存的洩漏。
堆内存是指程序從堆中分配的,大小任意的(内存塊的大小可以在程序運行期決定
[!--empirenews.page--],使用完後必須顯式釋放的内存。
應用程序一般使用malloc,realloc,new等函數從堆中分配到一塊内存,使用完後,程序必須負責相應的調用free或delete釋放該内存塊,否則,這塊内存就不能被再次使用,我們就說這塊内存洩漏了。
c内存洩露的檢測工具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.ParasoftInsure -針對C/C 應用的運行時錯誤自動檢測工具,它能夠自動監測C/C 程序,發現其中存在着的内存破壞、内存洩漏、指針錯誤和I/O等錯誤。并通過使用一系列獨特的技術(SCI技術和變異測試等),徹底的檢查和測試我們的代碼,精确定位錯誤的準确位置并給出詳細的診斷信息。能作爲MicrosoftVisual 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.BEAJRockit-用來診斷Java内存洩漏并指出根本原因,專門針對Intel平台并得到優化,能在Intel硬件上獲得最高的性能。
,使用完后必须显式释放的内存。
应用程序一般使用malloc,realloc,new等函数从堆中分配到一块内存,使用完后,程序必须负责相应的调用free或delete释放该内存块,否则,这块内存就不能被再次使用,我们就说这块内存泄漏了。
c内存泄露的检测工具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.ParasoftInsure -针对C/C 应用的运行时错误自动检测工具,它能够自动监测C/C 程序,发现其中存在着的内存破坏、内存泄漏、指针错误和I/O等错误。并通过使用一系列独特的技术(SCI技术和变异测试等),彻底的检查和测试我们的代码,精确定位错误的准确位置并给出详细的诊断信息。能作为MicrosoftVisual 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.BEAJRockit-用来诊断Java内存泄漏并指出根本原因,专门针对Intel平台并得到优化,能在Intel硬件上获得最高的性能。
疫情期间,房租会减免吗?其实,在疫情期间,我们可以看到很多新闻,有些中国好房东减免了所有的房租费,等疫情结束后再重新交房租,,这对于个人租户或企业来说,无疑是好消息,如果...[全文阅读]
TVB的悬疑剧一直深受大众的喜爱,而近期上映的刑侦日记更是汇聚了诸多熟悉的tvb演员,什么惠英红、王浩信啊。也正是因为这样网友们纷纷好奇刑侦日记是不是刑事侦缉档...[全文阅读]
科颜氏美白淡斑精华使用会搓泥和自己的肤质是有关系的,有可能是角质层没有定期做清理,也有可能是搭配的护肤品叠加太多,导致营养过剩,还有人担心科颜氏美白淡斑精华用...[全文阅读]
TF细黑管新色80口红试色,这支“断货王”终于有缎光质地了!
TF口红的80号色#impassioned堪称专柜断货王,颜色非常耐看,暖调红棕色非常高级、洋气。新出的细黑管的80号是缎光质地的,比哑光的会更奶油一些,质感感觉比纯哑光更迷人...[全文阅读]
ios15系统并没有更新很多功能,而且很多人都不太系统这个版本,如果大家想退出旧版本,还是喜欢iOS14的话,也是可以降级的。那么,ios15降级绕过验证通道降14呢?一起来看看...[全文阅读]
虽说时下很多播放的小甜剧都被大家喜爱,但是排在首位的便要数林一、徐璐主演的良辰美景好时光,但由于二人剧中本就在游戏中相熟,但是现实上却总是各种错过,于是良辰美...[全文阅读]
本文标题:c内存泄露的原因
上一篇:cad软件打不开是什么原因
下一篇:c语言产生的原因