記憶體管理是軟體開發中最為重要的環境,如果一個長期運作的程式,即使其中的某個函數每一次洩露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包括以下工具: 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列出了了常用選項:
四:測試代碼
代碼如下:
編譯
#gcc -g -o bug bug.c
記憶體檢查
#valgrind --tool=memcheck --leak-check=yes --show-reachable=yes ./bug
報告: