C++内存泄露检测
PHPz
PHPz 2017-04-17 13:01:37
0
4
585

今天面试时面试官问了一道很有意思的题。
在某个程序运行期间,系统检测到其使用的内存越来越大,如何检测内存泄露的具体位置。

我当时就不会了。

PHPz
PHPz

学习是最好的投资!

全部回覆(4)
阿神

內存越來越大不一定是內存洩露,也有可能是自己做的cache
我覺得這個問題比較優雅的答案是:
1) 先確定是否為內存洩露,內存長期佔用不釋放(有的程式自己做了memory pool,是會自己觸發釋放的)為洩露,否則可能是程式內部有cache,也可能是程式自己對記憶體管理有池化
2)先用靜態分析工具查看下可能的記憶體外洩
3)運行時的記憶體外洩不是工具能查出來的,需要自己分析,C++比較BT的一點是記憶體外洩是隱性的,而非顯性的,如果整個程式全是靜態庫的,可以針對介面進行測試,確認大概是哪個模組造成了洩露,如果是有動態庫包含在其中的,也建議先對接口進行測試,確認哪些模組會造成內存洩露,然後確認接口間的呼叫是否正常,看是否有隱形的洩露,也有些工具如purify可以打印些堆疊信息,不過針對特別複雜的環境,這個幫助還是有限。 而且windows和linux對於C++的某些features的實現也不盡相同,也有可能造成洩露,曾經見過一個庫非常穩定的運行在Linux下,在windows下就會造成莫名其妙的洩露(一樣的源碼,支持跨平台)

巴扎黑

我們用Valgrind.
另外,就回答這個面試題而言,我覺得可以這麼答:調用brk(0)返回堆頂地址..

刘奇

Purify或strike

Ty80

手寫構造器。 。 。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板