VLD簡介
由於C/C++語言沒有所謂的垃圾收集器,內存的分配和釋放都需要程序員自己來控制,這會給C/C++程序員帶來一定的困難。當您的程序越來越複雜時,它的內存管理也會變得越來越困難。內存泄漏、內存越界是最常見的內存問題之一。 內存泄漏如果不是很嚴重的話,在短時間內對程序不會造成太大的影響,而且在進程終止的時候,所有分配的內存都會釋放掉。但是對於長時間運行的程序,其破壞力是驚人的,從性能下降到內存耗盡,甚至會影響到其它程序的正常運行。 此外,內存問題存在一個共同的特點,它本身並不會有很明顯的現象,當有異常出現時就很難檢查問題的原因所在,這給調試內存問題帶來了很大的難度。 VLD是一款用於VisualC++的免費內存泄漏檢查工具。可以在codeproject.com網站上找到,相比其它的內存泄漏哦給你根據,他在檢查內存泄漏的同事,還具有如下特點: 1) 可以得到內存泄漏點的調用堆棧,如果可以的話,還可以得到其所在的文件及行號; 2) 可以得到泄漏內存的完整數據; 3) 惡意設置內存泄漏報告的級別; 4) 它以動態庫的形式提供,無需編譯源代碼,只需要很小的改動程序; 5) 源代碼使用GNU許可發佈,並有詳細的文檔及其註釋。 從使用的角度講,VLD簡單易用,對於使用者自己的代碼中唯一需要修改的地方是#include VLD的頭文件後正常運行自己的程序就可以發現內存問題。從研究角度上講,如果輸入到VLD源代碼,可以學習到堆內存分片與釋放的原理、內存檢查的原理機器內存操作的常用技巧等。
VLD使用
首先到下面地址下面VLD源代碼包:vld源代碼
下載以後解壓目錄如下:
用VS2015 打開目錄“.\sourceCode\vld\”下的文件“vld_vs14.sln”,打開工程如下:
編譯其中的“vld”工程。
將目錄“.\sourceCode\vld\src\”下的“vld.h”、“vld_def.h”文件拷貝到我們自己的工程目錄下面(使我們工程能包含“vld.h”頭文件)。
將目錄“.\sourceCode\vld\src\bin\Win32\Debug-v140\”(這裏假設我們工程爲32位程序,如果是64位程序,到對應的x64目錄下面拷貝)下的“vld.lib”文件拷貝考我們自己的工程目錄下面(使我們工程能鏈接到這個庫文件)。
將目錄“.\sourceCode\vld\src\bin\Win32\Debug-v140\”(這裏假設我們工程爲32位程序,如果是64位程序,到對應的x64目錄下面拷貝)下的“vld_x86.dll”文件拷貝到我們自己工程目錄下的exe可執行文件相同目錄。
將目錄“.\sourceCode\vld\setup\dbghelp\x86\”(這裏假設我們工程爲32位程序,如果是64位程序,到對應的x64目錄下面拷貝)下“dbghelp.dll”、“Microsoft.DTfW.DHL.manifest”文件拷貝到我們自己工程目錄下的exe可執行文件相同目錄。
執行完上面操作,所有的配置完成,可以執行程序了。
我這裏寫了一個測試程序如下:
#include "stdafx.h"
#include "vld.h"
int main()
{
int *p = new int[10];
//delete[] p;
return 0;
}
工程配置目錄如下:
可執行文件目錄如下:
當我們註釋掉語句delete[] p時,程序執行完畢,在VS2015的輸出框會提示如下內存泄漏:
如果我們去掉註釋,程序執行完畢,在VS2015的輸出框會提示如下: