定义一个内存管理结构体,成员如:
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;
}
这样,对内存管理变量的成员进行查询判断就可以知道是否有内存未释放。
本文介绍了一种内存管理结构,通过struct mem_manager实现不同类型的内存计数,并利用单例模式创建全局变量。重点讲解了如何通过cnt_kmalloc和cnt_kfree接口,配合原子操作处理多线程下内存申请与释放,确保资源准确性。
1574

被折叠的 条评论
为什么被折叠?



