記憶體洩漏檢測

2021-07-23 04:56:48 字數 1102 閱讀 7805

當以前分配的一片記憶體不再需要使用或無法訪問時,但是卻並沒有釋放它,那麼對於該程序來說,會因此導致總可用記憶體的減少,這時就出現了記憶體洩漏memory leak。在程式設計實踐中,往往用到較多的是動態的記憶體分配,這樣在程式執行的時候分配記憶體,而不是在建立程序的時候就分配記憶體,這大大提高了記憶體的使用率。在複雜、大型的專案程式中,很可能出現記憶體洩露,我們可以儘量減少記憶體洩露,因為這樣我們的程式跑起來才更安全。

廣義上的記憶體洩露可以是增加不必要的記憶體使用,但是更精確的定義是:對記憶體失去了控制,因而造成了記憶體的浪費。我們一般說的記憶體洩露是堆記憶體洩露,堆記憶體是可以動態分配的(大小是任意的,在程式執行期間決定的)。使用完後必須顯式釋放的記憶體。應用程式一般使用malloc,calloc,realloc,new等函式從堆中分配到一塊記憶體,使用完後,程式必須負責相應的呼叫free或delete釋放該記憶體塊,否則,這塊記憶體就不能被再次使用,我們就說這塊記憶體洩漏了。

乙個簡單的檢測記憶體洩露的程式例子:

memory-leak.c檔案

#include 

int main (void)

生成除錯的二進位制檔案(加上除錯引數 -g):

gcc memory-leak.c -g -o memory

指定trace的檔名

export malloc_trace=a.log

除錯,檢查是否發生了記憶體洩露

unset malloc_trace

mtrace a.out a.log

得到的結果:

memory not freed:

------------------------------------

address size caller

0x00000000022e5460 0xa at /bsdocfs/memory-leak.c:7

0x00000000022e5480 0x16 at /bsdocfs/memory-leak.c:8

說明有記憶體洩露,並且指出了在程式的位置。

記憶體洩漏檢測

一 記憶體洩漏 記憶體洩漏是程式設計中常常見到的乙個問題.記憶體洩漏往往會一種奇怪的方式來表現出來,基本上每個程式都表現出不同的方式.但是一般 最後的結果只有兩個,乙個是程式當掉.乙個是系統記憶體不足.還有一種就是比較介於中間的結果程式不會當,但是系統的反映時間明顯降低,需要定時的 reboot才會...

記憶體洩漏檢測

一 記憶體洩漏 記憶體洩漏是程式設計中常常見到的乙個問題.記憶體洩漏往往會一種奇怪的方式來表現出來,基本上每個程式都表現出不同的方式.但是一般最後的結果只有兩個,乙個是程式當掉.乙個是系統記憶體不足.還有一種就是比較介於中間的結果程式不會當,但是系統的反映時間明顯降低,需要定時的reboot才會正常...

記憶體洩漏檢測

記憶體洩漏檢測 自己寫的 作者 很土 關鍵字 記憶體洩漏 記憶體 debug heap 堆 原作者姓名 很土 介紹簡單說明了一下沒有工具的情況如何運用vc庫中的工具來檢查 的記憶體洩漏問題 讀者評分 8 評分次數 2 正文記憶體洩漏檢測 一 記憶體洩漏 記憶體洩漏是程式設計中常常見到的乙個問題.記憶...