天天看點

Valgrind記憶體管理工具

  記憶體管理是軟體開發中最為重要的環境,如果一個長期運作的程式,即使其中的某個函數每一次洩露1KB的記憶體空間,該函數每1分鐘調用100次,100天後,将産生60*24*10*1KB=1.44GB的記憶體空間,對于一般系統來說,其實早已處于當機的狀态。如何能夠檢視這種記憶體洩露呢,可以使 用Valgrind記憶體管理工具。

一:Valgrind簡介

 Valgrind是一款用于記憶體調試、記憶體洩漏檢測以及性能分析的軟體開發工具。 最初作者是Julian Seward,他于2006年由于在開發Valgrind上的工作獲得了第二屆Google-O'Reilly開源代碼獎。 遵守GNU通用公共許可證條款,是一款自由軟體。此工具由核心(core)以及基于核心的其他調試工具組成。核心類似于一個架構,模拟了一個CPU環境,并提供服務給其他工具:而其他工具則類似于插件, 利用核心提供的服務完成各種特定的記憶體調試任務。Valgrind的體系結構如下圖所示:

Valgrind記憶體管理工具

Valgrind包括以下工具:       1.memcheck 探測程式中記憶體管理存在的問題。它檢查所有對記憶體的讀/寫操作,并截取所有的malloc/new/free/delete調用,是以memcheck工具能夠探測到以下問題:        (1)使用為初始化的記憶體。        (2)讀/寫已經被釋放的記憶體。        (3)讀/寫不恰當的記憶體空間。        (4)讀寫記憶體越界。        (5)記憶體洩露。        (6)使用malloc/new/new[]和free/delete/delete[]不比對。        (7)src和dst的重疊     2.Callgrind 它主要用來檢查程式中函數調用過程中出現的問題。    3.Cachegrind它主要用來檢查程式中緩存使用出現的問題。 

  4.Helgrind它主要用來檢查多線程程式中出現的競争問題。 

  5.Massif它主要用來檢查程式中堆棧使用中出現的問題。 

  6.Extension可以利用core提供的功能,自己編寫特定的記憶體調試工具。 

二:下載下傳與安裝 Valgrind可以使用源碼安裝,也可以使用軟體包更新方法,在ubuntu系統下,可以使用一下指令跟新: sudo apt-get install valgrind 或

http://www.valgrind.org

#wget http://www.valgrind.org/downloads/valgrind-3.8.1.tar.bz2

#tar xvf valgrind-3.8.1.tar.bz2

#cd valgrind-3.8.1

#./configure --prefix=/usr/local/webserver/valgrind

#make

#make install

三:Valgrind常用選項

 表3-2~表3-5列出了了常用選項:

Valgrind記憶體管理工具
Valgrind記憶體管理工具
Valgrind記憶體管理工具
Valgrind記憶體管理工具

四:測試代碼

代碼如下:

Valgrind記憶體管理工具
編譯

#gcc -g -o bug bug.c

 

記憶體檢查
#valgrind --tool=memcheck --leak-check=yes --show-reachable=yes ./bug

 

報告:
      
Valgrind記憶體管理工具

繼續閱讀