文章目录

  • 前言
  • 一、VLD
  • 二、下载、安装
  • 三、使用



前言

C/C++ 程序越复杂,内存的管理显得越重要,稍有不慎就会出现泄漏。如果内存泄漏不是很严重,在短时间内对程序不会有太大影响,这也使得内存泄漏问题有很强的隐蔽性,不易被发现。然而不管内存泄漏多么轻微,当程序长时间运行时,其破坏力是惊人的 - 从性能下降到内存耗尽,甚至会影响其他程序的正常运行。


一、VLD

VLD(Visual Leak Detector)是一款用于 Visual C++ 的免费内存泄露检测工具。相比较其它内存泄露检测工具,它在检测到内存泄漏的同时,还具有如下特点:

  • 可以得到内存泄漏点的调用堆栈,如果可以的话,还能得到其所在文件及行号;
  • 可以得到泄露内存的完整数据;
  • 可以设置内存泄露报告的级别;
  • 它是一个已经打包的 lib,使用时无须编译源码。对于使用者自己的代码,只需要做很小的改动;源码使用 GNU 许可发布,并有详尽的文档及注释。对于想深入了解堆内存管理的读者,是一个不错的选择。

可见,VLD 简单易用。只需要做很小的改动(添加库并包含头文件),然后正常运行自己的程序,就可以发现内存问题;如果深入源码,可以学习到堆内存分配与释放的原理、内存泄漏检测的原理及内存操作的常用技巧等。

二、下载、安装

下载、安装

VLD 主页文档地址

GitHub 地址

lua 怎么排查内存泄漏 查看内存泄漏工具_内存泄漏

三、使用

要在项目中使用 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;
}

结果:

lua 怎么排查内存泄漏 查看内存泄漏工具_开发语言_02


然后修改对应代码。


除此之外,还可以利用微软的gflags.exe进行检查内存泄露问题。