C++程序内存泄露检测工具
作者:网络转载 发布时间:[ 2014/10/30 11:20:41 ] 推荐标签:c++ 内测 NET 软件开发
功能:
用于检?c++程序的内存泄露。
原理:
事实上非常easy,是通过函数的重载机制,捕获应用程序的new, new[] , delete , delete[], malloc,calloc,free等内存操作函数。
特点:
因为在检?的过程中,须要记录用户程序内存分配信息,所以工具本身必须进行内存动态分配。为了提高内存分配效率,程序实现了两个链表。
1、空暇链表,事实上是一个简单的内存池
//定义一个结构,保存内存分配信息
typedef struct _tagMemoryInfo
{
void* addr; //保存分配的内存地址
size_t size; //内存大小
_UL lineNum; //调用内存分配函数的行号
char fileName[MAX_FILE_LEN]; //文件名
}MemoryInfo;
//内存分配信息的链表结构,这里之所以定义为union类型,是为了省去next成员的开销
union FreeList
{
FreeList* next;
MemoryInfo data;
};
2、当前正在保存内存信息的链表
typedef struct _tagBusyList
{
_tagBusyList* next;
MemoryInfo* data;
}BusyList;
不足:
1、仅仅是在vc2005上?试通过,没有在其它平台上?试过
2、不支持多线程(兴许有可能支持)
3、保存当前内存分配信息的链表,存在next字段的内存开销。
源码:
1、头文件
#ifdef DETECT_MEMORY_LEAK
#ifndef _DETECT_MEMORY_LEAK_H_
#define _DETECT_MEMORY_LEAK_H_
typedef unsigned long _UL;
void* __cdecl operator new(unsigned int size , _UL lineNum , const char* file);
void* __cdecl operator new[](unsigned int size , _UL lineNum , const char* file);
void __cdecl operator delete(void *p);
void __cdecl operator delete [] (void *p);
void __cdecl operator delete(void *p , _UL lineNum , const char* file);
void __cdecl operator delete [] (void *p , _UL lineNum , const char* file);
void* __cdecl _DebugMalloc(size_t size , _UL lineNum , const char* file);
void* __cdecl _DebugCalloc(size_t num , size_t size , _UL lineNum , const char* file);
void __cdecl _DebugFree(void* addr);
#ifndef DETECT_MEMORY_LEAK_IMPL
#define new DEBUG_NEW
#define DEBUG_NEW new(__LINE__ , __FILE__)
#define malloc DEBUG_MALLOC
#define DEBUG_MALLOC(x) _DebugMalloc(x , __LINE__ , __FILE__)
#define calloc DEBUG_CALLOC
#define DEBUG_CALLOC(x) _DebugCalloc(x , __LINE__ , __FILE__)
#define free DEBUG_FREE
#define DEBUG_FREE(x) _DebugFree(x)
#endif
void DumpLeakedMemoryInfo();
#endif//_DETECT_MEMORY_LEAK_H_
#endif//DETECT_MEMORY_LEAK
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11