C深入—内存泄露
先來段基礎(chǔ)知識:
在堆內(nèi)存分配的方式--->動態(tài)內(nèi)存分配,程序在運(yùn)行的時候用malloc或new申請任意多少的內(nèi)存,程序員自己負(fù)責(zé)在何時用free或delete釋放內(nèi)存。動態(tài)內(nèi)存的生存期由我們決定,使用非常靈活,但是問題也很多。
?
不像Java、VB、.NET以及Lisp都有自己的內(nèi)存管理和垃圾回收機(jī)制,C和C++覺得把堆的管理留給你--->程序員,這樣使你編程可以更靈活,可以更好的提高程序的性能,但是帶來的問題就是內(nèi)存管理你必須懂,否則你會看到:“卡到?jīng)]響應(yīng)的程序”,常見的一個很難處理的錯誤->內(nèi)存泄露就很讓很多程序猿頭疼。
呵呵呵,是不是覺得我主要學(xué)的是Java、C#等等,他們有內(nèi)存管理和垃圾回收機(jī)制,我不用管而很開心的笑了?????
?
別笑,就是拿C#來說,即使有內(nèi)存管理和垃圾回收機(jī)制也會出現(xiàn)內(nèi)存泄露的!
?
”為什么呀?“
?
因為C#里面的內(nèi)存管理回收托管堆里面的垃圾,不會處理如:數(shù)據(jù)庫連接字符串,還有一些關(guān)于硬件方面的數(shù)據(jù)。
所以掌握內(nèi)存有關(guān)方面的知識也是很有必要的,即使你是Java、C#等等語言的開發(fā)者,也可以提高所開發(fā)應(yīng)用的性能!
?
下面是一些有關(guān)內(nèi)存檢測的工具和使用方法的連接,如果有興趣也可以自己寫一個簡單的內(nèi)存泄露檢測工具:
IBM Rational Purify:
IBM出品必屬精品,一個面向VC, VB或者Java開發(fā)的測試Visual C/C++ 和Java 代碼中與內(nèi)存有關(guān)的錯誤,確保整個應(yīng)用程序的質(zhì)量和可靠性。
想了解的:https://www.ibm.com/developerworks/cn/rational/r-cail/#N10043
valgrind:
一個開源的軟件,是一個linux下很好地內(nèi)存檢測工具,不僅可以檢測內(nèi)存泄露,如果你需要下面的一篇博客可能會對你有幫助:
http://blog.csdn.net/luxiuwen/article/details/7659128
BoundsChecker:
在window下運(yùn)行的很強(qiáng)大的哦,同樣推薦一篇博客:
http://blog.csdn.net/cwzmb/article/details/3506902
?
簡單的內(nèi)存泄露的例子:
泄露MAX*4個字節(jié)的內(nèi)存,問題是最后沒有free(p)
?再來個不容易察覺的例子:
?
如果if里面的語句成立,那么直接return了還是沒有執(zhí)行free(p)
?
當(dāng)然前面給的例子都很簡單,不是所有的都可以一眼看出來,
?
想想當(dāng)你寫萬行代碼時,如果發(fā)生內(nèi)存泄露了該怎么找????
?
更何況一個比較大的項目。。。。。。。
?
學(xué)會一兩個內(nèi)存泄露檢測工具還是很有必要的,當(dāng)然對于測試人員來說是必須的!
?
轉(zhuǎn)載于:https://blog.51cto.com/skyhole/1186002
總結(jié)
- 上一篇: 对于前端js框架对于事件处理的应用场景探
- 下一篇: comet 异步请求技术中相关关键字解释