C C 記憶體洩露及記憶體檢測之我見

2021-06-03 15:10:55 字數 1363 閱讀 8456

相信很多在使用c/c++的人都或多或少的遇到過記憶體洩露的問題,因此如何消除記憶體洩露成了乙個我們必修的課題,我個人認為,要在c/c++程式設計的時候消除記憶體洩露,需要做到如下幾個方面:

良好的程式設計習慣,在應對一些有new/malloc 以及呼叫一些建立物件的介面時需特別注意,如果一不小心,就容易產生記憶體洩露。

對於一些介面編寫的程式設計師,需要注意的是如果介面中就返回記憶體物件的時候,需要將自己的介面足夠清晰,要讓上層使用者能夠容易的意識到,需要後續的釋放才能完成這些介面的使用。

儘管我們可以做到上述這些,但是有時候我們似乎也不能完全避免記憶體洩露,這時候就該輪到我們的記憶體檢測上場了,大部分情況下我們會求助於一些工具,我們接下來介紹。

在我最近的工作當中,我基本上就是用它來檢測記憶體洩露,這個工具使用起來很簡單,而且的確能夠找到很多的記憶體洩露問題,非常值得推薦。

但是,使用的時候也需要注意方法以及技巧,我們剛剛說了這是乙個動態的記憶體檢測工具,也就是說它只能檢測到能執行到的所有**的記憶體洩露,並不能保證檢測出那些未執行到的**中的洩露,所以在使用的過程中,根據我的經驗來說,需要首先在不使用這個工具的情況下重現出記憶體洩露,然後再使用這個工具執行相同的操作,這樣就能保證洩露能夠被找出來,要不然如果用工具去跑一些不存在洩露的case/scenario,其實無異於浪費時間。

這是乙個在windows下的乙個記憶體洩露的檢測工具,這個工具比較小,使用起來很方便,而且原理比較簡單,我認為是乙個很好的工具,而且是免費的,相對於一些龐大而收費的記憶體檢測工具,我覺得這個軟體還是比較值得推薦的, 相對valgrind來說,缺點就是需要重新編譯**來完成注入,但是缺點也可以變為優點,因為它的好處就是提供了很多的靈活性,這裡就不一一對比了,還要看大家在平時工作中的實際使用對比。

好了,介紹完了兩個收費的軟體,該說說一些收費的軟體了,其中比較好的當屬ibm rantional purify 和boundscheck。

這兩款軟體自然也有它們的亮點,要不然也不會有人傻傻的去買這麼貴的乙個東西,它們除了能檢測出記憶體洩露之外,還能檢測出記憶體越界,非法訪問等一系列記憶體問題。

在這裡我們僅僅聊的是記憶體洩露,所以還是回到我們的話題,有些人可能會認為,既然收費的軟體這麼強大,那麼是不是條件允許的情況下,應該先使用這些收費的工具來檢測記憶體洩露,這種問題,筆者覺得見仁見智,但是,對於筆者來說,更傾向於先用上述免費的軟體來查詢問題,如果還是有記憶體的問題,再求助於這些龐大的軟體,為什麼呢? 因為這些免費的軟體都很小,具有「小快靈」的特點,所以效率相對來說比較高一點。

這裡給大家說乙個實際的例子,我之前使用purify的時候碰到這個這樣的問題,我們的程式有好幾百兆,執行起來,首先速度很慢,其實有時候在啟動的過程當中會有很多莫名奇妙的錯誤,效率相當低下,這也是我的前車之鑑,跟大家一起分享,當然這個也需要根據自己的實際情況自己把握。

good luck

請大家多多指教

記憶體洩露檢測

c 中檢測記憶體洩漏可以引入系統定義的巨集來檢視,內存在哪個位置洩漏 檔案開始處加入下列定義 define crtdbg map alloc include include 程式退出時加入以下函式 crtdumpmemoryleaks 如果有洩漏會顯示 記憶體洩漏是程式設計中常常見到的乙個問題,我所...

檢測記憶體洩露

程式結束時,作業系統會 程式占用的資源.但是,只要程式還在執行,如果不進行清理,資源最終可能被耗盡.1.vc記憶體洩露檢查工具 visual leak detector 現在已知的最新有2.0版本的,使方法不詳。使用 visual leak detector 2.2.3 在vs工程的linker i...

記憶體洩露檢測

1 包含標頭檔案 include include 2 每個cpp檔案包含 static char this file file define new new normal block,this file,line 3 設定標誌 int tmpdbgflag tmpdbgflag crtsetdbgf...