下面是一段可以我们自己实现的用于内泄漏检查的技术,方法很简单,有两个主要的注意点:
1。 是用我们自己定义的内存分配函数
2。 函数原型要方便实用,而且还要提供行号,文件名参数,可以使用__FILE__和__LINE__。
具体方法:
定义我们自己的malloc和free函数,维护一个我们自己的内部数据结构,比如map,每次分配内存的时候,都调用我们自己的这些函数,他们会对我们每次的内存分配都记录在案,同时,将调用点所在文件和行号也记录在案,即使用那些宏,而每次要求用户手动写这些宏肯定不好,所以我们用宏定义来方便用户接口。当我们释放内存的时候,他们会检查我们维护的数据结构,将其释放,此外提供一个内存是用报告函数,他会检查当前的内部数据结构,如果有没有释放的内存的话,就会将其大小,哪个文件的那行代码进行的分配打印出来。这个函数一般是在我们即将退出程序的时候才会调用的。
//下面几个函数就是我们提供的内存使用纪录函数以及内存使用情况报告函数
/* These functions are only visible in the debug version */
void MemoryManagerDump(void);
void* MemoryManagerMalloc(uc_uint32 size, uc_uint32 line, uc_string sourcefile);
void MemoryManagerFree(void* pvoid, uc_uint32 line, uc_string sourcefile);
//如下两个宏就是将用户接口尽量简化,同时提供行号和文件参数
#define UC_MALLOC(size) MemoryManagerMalloc((size), __LINE__, __FILE__)
#define UC_FREE(lpvoid) MemoryManagerFree((lpvoid), __LINE__, __FILE__)
阅读(2637) | 评论(0) | 转发(0) |