linux下檢測內(nèi)存泄漏工具Valgrind |
發(fā)布時(shí)間: 2014/8/12 11:03:36 |
linux下檢測內(nèi)存泄漏工具Valgrind簡介 在我們編寫C/C++的時(shí)候,最常見的錯(cuò)誤之一就是內(nèi)存泄露,這樣的問題其實(shí)跟程序員的編程習(xí)慣密不可分。如果你在虛擬主機(jī)申請內(nèi)存空間之后能夠馬上在合適的位置釋放內(nèi)存。會極大程度的避免內(nèi)存泄漏的情況。但是人非圣賢,孰能無過。有時(shí)候我們確實(shí)忘記釋放內(nèi)存而導(dǎo)致了比較嚴(yán)重的錯(cuò)誤,所以這個(gè)時(shí)候我們需要借助valgrind這個(gè)工具來判斷內(nèi)存泄漏。 Valgrind 是一款 Linux下(支持 x86、x86_64和ppc32)程序的內(nèi)存調(diào)試工具,它可以對編譯后的二進(jìn)制程序進(jìn)行內(nèi)存使用監(jiān)測(C語言中的malloc和free,以及C++中的new和delete),找出內(nèi)存泄漏問題。 Valgrind 中包含的 Memcheck 工具可以檢查以下的程序錯(cuò)誤: 使用未初始化的內(nèi)存 (Use of uninitialised memory) 使用已經(jīng)釋放了的內(nèi)存 (Reading/writing memory after it has been free’d) 使用超過malloc分配的內(nèi)存空間(Reading/writing off the end of malloc’d blocks) 對堆棧的非法訪問 (Reading/writing inappropriate areas on the stack) 申請的空間是否有釋放 (Memory leaks – where pointers to malloc’d blocks are lost forever) malloc/free/new/delete申請和釋放內(nèi)存的匹配(Mismatched use of malloc/new/new [] vs free/delete/delete []) src和dst的重疊(Overlapping src and dst pointers in memcpy() and related functions) 重復(fù)free valgrind的使用實(shí)例: 在官網(wǎng)上找到valgrind的tar包,解壓,編譯。完成后make安裝:
編譯到制定位置:
安裝valgrind:
完成之后我們就可以對系統(tǒng)中的程序進(jìn)行檢測了,首先我們用ls顯示根目錄下的文件,ls命令是沒有內(nèi)存泄漏的:
為了體現(xiàn)valgrind 的檢錯(cuò)功能,我們故意編寫一個(gè)只malloc沒有free的C程序:
編譯鏈接后使用valgrind進(jìn)行檢測,發(fā)現(xiàn)有內(nèi)存泄漏:
然后我們在C程序中釋放內(nèi)存:
再次編譯鏈接完成后使用valgrind檢測:
這次則顯示我們申請并且釋放了400B的空間,體現(xiàn)了valgrind的強(qiáng)大作用。 有這樣的檢錯(cuò)工具當(dāng)然很好,但是我更認(rèn)為程序員應(yīng)該始終頭腦清醒,知道自己的程序在做什么,記得這個(gè)忠告,如果你的語言沒有垃圾回收機(jī)制。那么在申請一塊內(nèi)存之后先不要做任何操作,先在合適的位置釋放內(nèi)存。畢竟好借好還,再借不難么。 本文出自:億恩科技【mszdt.com】 服務(wù)器租用/服務(wù)器托管中國五強(qiáng)!虛擬主機(jī)域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |