文章目录
- 前言
- 一、VLD
- 二、下载、安装
- 三、使用
前言
C/C++ 程序越复杂,内存的管理显得越重要,稍有不慎就会出现泄漏。如果内存泄漏不是很严重,在短时间内对程序不会有太大影响,这也使得内存泄漏问题有很强的隐蔽性,不易被发现。然而不管内存泄漏多么轻微,当程序长时间运行时,其破坏力是惊人的 - 从性能下降到内存耗尽,甚至会影响其他程序的正常运行。
一、VLD
VLD(Visual Leak Detector)是一款用于 Visual C++ 的免费内存泄露检测工具。相比较其它内存泄露检测工具,它在检测到内存泄漏的同时,还具有如下特点:
- 可以得到内存泄漏点的调用堆栈,如果可以的话,还能得到其所在文件及行号;
- 可以得到泄露内存的完整数据;
- 可以设置内存泄露报告的级别;
- 它是一个已经打包的 lib,使用时无须编译源码。对于使用者自己的代码,只需要做很小的改动;源码使用 GNU 许可发布,并有详尽的文档及注释。对于想深入了解堆内存管理的读者,是一个不错的选择。
可见,VLD 简单易用。只需要做很小的改动(添加库并包含头文件),然后正常运行自己的程序,就可以发现内存问题;如果深入源码,可以学习到堆内存分配与释放的原理、内存泄漏检测的原理及内存操作的常用技巧等。
二、下载、安装
下载、安装
VLD 主页文档地址
GitHub 地址
三、使用
要在项目中使用 VLD,请遵循以下简单步骤:
- 在程序中的至少一个 C/C++源文件中,包括 vld.h 头文件。将包含语句添加到哪个文件并不重要。标头相对于其他标头的包含顺序也无关紧要。唯一的例外是 stdafx.h(或任何其他预编译头)。预编译头(如 stdafx.h)必须始终是源文件中包含的第一个头文件,因此 vld.h 必须包含在任何预编译头之后。
- 如果程序包含一个或多个 DLL,并且您还希望检查内存泄漏,则还要将 vld.h 包含在要包含在泄漏检测中的每个 DLL 中的至少一个源文件中。
- 生成程序的调试版本。
注意:与早期(1.9 之前)版本的 VLD 不同,现在可以在每个源文件中包含 vld.h,或者将其包含在许多或所有源文件所包含的公共标头中。只有 VLD 代码的一个副本将加载到进程中,无论有多少源文件包含 vld.h。
配置项目:
附加包含目录:D:\Program Files\Visual Leak Detector\include
附加库目录:D:\Program Files\Visual Leak Detector\lib\Win64
附加依赖项:vld.lib
示例代码:
#include <iostream>
#include <vld.h>
using namespace std;
int main(int argc, char* argv[])
{
int* aaa = new int[10];
return 0;
}
结果:
然后修改对应代码。
除此之外,还可以利用微软的gflags.exe进行检查内存泄露问题。