定义一个内存管理结构体,成员如:
struct mem_manger {
long long mem_cnt[class]; //不同类型的使用内存计数
} global_mem_mgr;
然后声明一个该结构体的全局变量(可以使用单例模式),再重新定义并每次申请、释放内存的调用的接口;在接口中修改内存技术:
void *cnt_kmalloc(int size, int flag, int i)
{
ret = kmalloc(size,flag);
global_mem_mgr.mem_cnt[i] += size //如果是多线程使用,就要考虑并发,使用原子操作
return ret;
}
void cnt_kfree(void *p, int size, int i)
{
kfree(p);
global_mem_mgr.mem_cnt[i] -=size;
}
这样,对内存管理变量的成员进行查询判断就可以知道是否有内存未释放。