c内存泄露的原因_十万个为什么_诗歌大全

诗歌大全>知识>十万个为什么

c内存泄露的原因

发布时间: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硬件上獲得最高的性能。

内存泄漏是一种很难定位和跟踪的错误,那么内存泄露的原因是什么呢?下面是生活日记小编精心为你整理的c内存泄露的原因,一起来看看

c内存泄露的原因

简单的说就是申请一块内存空间,使用完毕后没有释放掉。它的一般表现方式是程序运行时间越长,占用内存越多,最终用尽全部内存,整个系统崩溃。由程序申请的一块内存,且没有任何一个指针指向它,那么这块内存就泄露了。

(1). 常发性内存泄漏。

发生内存泄漏的代码会被多次执行到,每次被执行的时候都会导致一块内存泄漏。

(2). 偶发性内存泄漏。

发生内存泄漏的代码只有在某些特定环境或操作过程下才会发生。常发性和偶发性是相对的。对于特定的环境,偶发性的也许就变成了常发性的。所以测试环境和测试方法检测内存泄漏至关重要。

(3). 一次性内存泄漏。

发生内存泄漏的代码只会被执行一次,或者由于算法上的缺陷,导致总会有一块仅且一块内存发生泄漏。比如,在类的构造函数中分配内存,在析构函数中却没有释放该内存,所以内存泄漏只会发生一次。

(4). 隐式内存泄漏。

程序在运行过程中不停的分配内存,但是直到结束的时候才释放内存。严格的说这里并没有发生内存泄漏,因为最终程序释放了所有申请的内存。但是对于一个服务器程序,需要运行几天几周

周甚至几个月,不及时释放内存也可能导致最终耗尽系统的所有内存。所以,我们称这类内存泄漏为隐式内存泄漏。

c内存泄露的表现

cpu资源耗尽:估计是机器没有反应了,键盘,鼠标,以及网络等等。这个在windows上经常看见,特别是中了毒。

进程id耗尽:没法创建新的进程了,串口或者telnet都没法创建了。

硬盘耗尽: 机器要死了,交换内存没法用,日志也没法用了,死是很正常的。

内存泄漏或者内存耗尽:新的连接无法创建,free的内存比较少。发生内存泄漏的程序很多,但是要产生一定的后果,就需要这个进程是无限循环的,是个服务进程。当然,内核也是无限循环的,所以,如果内核发生了内存泄漏,情况就更加不妙。内存泄漏是一种很难定位和跟踪的错误,目前还没看到有什么好用工具(当然,用户空间有一些工具,有静态分析的,也会动态分析的,但是找内核的内存泄漏,没有好的开源工具)

内存泄漏和对象的引用计数有很大的关系,再加上c/c 都没有自动的垃圾回收机制,如果没有手动释放内存,问题就会出现。如果要避免这个问题,还是要从代码上入手,良好的编码习惯和规范,是避免错误的不二法门。

一般我们常说的内存泄漏是指堆内存的泄漏。

堆内存是指程序从堆中分配的,大小任意的(内存块的大小可以在程序运行期决定

国家规定疫情减免房租了吗 2020疫情房租减免政策

疫情期间,房租会减免吗?其实,在疫情期间,我们可以看到很多新闻,有些中国好房东减免了所有的房租费,等疫情结束后再重新交房租,,这对于个人租户或企业来说,无疑是好消息,如果...[全文阅读]

刑侦日记根据什么改编的

TVB的悬疑剧一直深受大众的喜爱,而近期上映的刑侦日记更是汇聚了诸多熟悉的tvb演员,什么惠英红、王浩信啊。也正是因为这样网友们纷纷好奇刑侦日记是不是刑事侦缉档...[全文阅读]

科颜氏美白淡斑精华搓泥吗

科颜氏美白淡斑精华使用会搓泥和自己的肤质是有关系的,有可能是角质层没有定期做清理,也有可能是搭配的护肤品叠加太多,导致营养过剩,还有人担心科颜氏美白淡斑精华用...[全文阅读]

TF细黑管新色80口红试色,这支“断货王”终于有缎光质地了!

TF口红的80号色#impassioned堪称专柜断货王,颜色非常耐看,暖调红棕色非常高级、洋气。新出的细黑管的80号是缎光质地的,比哑光的会更奶油一些,质感感觉比纯哑光更迷人...[全文阅读]

ios15怎么退回14不用电脑

ios15系统并没有更新很多功能,而且很多人都不太系统这个版本,如果大家想退出旧版本,还是喜欢iOS14的话,也是可以降级的。那么,ios15降级绕过验证通道降14呢?一起来看看...[全文阅读]

良辰美景好时光梁辰陆景什么时候认出对方的

虽说时下很多播放的小甜剧都被大家喜爱,但是排在首位的便要数林一、徐璐主演的良辰美景好时光,但由于二人剧中本就在游戏中相熟,但是现实上却总是各种错过,于是良辰美...[全文阅读]

本文标题:c内存泄露的原因

本文链接:https://m.biqugena.com/zhishi/shiwan/371175.html

上一篇:cad软件打不开是什么原因

下一篇:c语言产生的原因

十万个为什么相关文章
更多十万个为什么文章

精选十万个为什么

经典知识分类阅读

十万个为什么热点