下载后可任意编辑C 语言多线程内存管理模块摘要:一个多线程动态内存管理模块,可以有效地检测 C 语言中内存泄漏和内存越界等错误
1 原理分配通过重新改写内存分配函数,把调用时的信息保存在一个节点中,节点中包括此内存分配的首地址,大小以及分配所在的源文件、函数、行号,并用一个 HASH 表来保存所有节点
越界检测为了检测写越界的错误,在用户申请的内存前后各增加了一定大小的内存作为监测区域,并初始化成预定值(0xdeadbeef)
假如发生越界写操作时,预定值就会发生改变, 即可检测到越界操作错误
释放重新改写内存释放函数 free,释放时节点从 HASH 表中删除并进行越界检测
查看手动调用 show_memory()或 show_memory_summary()查看内存使用情况并进行越界检测
以下涉及内存分配和内存释放的函数被重新改写:1
malloc2
calloc3
realloc4
strdup5
strndup6
asprintf7
vasprintfHASH 表如下图所示:1下载后可任意编辑节点结构如下:static struct mm_region {struct mm_region *next;char file[40];/* 分配所在的文件 */char func[40];/* 分配所在的函数 */unsigned int lineno;/* 分配所在的行 */size_t len;/* 内存分配的大小 */unsigned int fence;/* 内存起始边界,用于头越界检测 */unsigned char data[0];/* 用户内存分配首地址,malloc等函数返回以此为首地址的len长度的一块内存 */} *regions[SOME_PRIME];内存中一条节点的结构:2下载后可任意编辑2 测试步骤:1
引入头文件:在需要检测的 C/C+