打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
做大型C语言项目,系统经常死机咋办?

我们在面对一个大项目时,会常常因为各种内存问题导致很多麻烦事情,调试内存的分配与释放是很常见的事情,其中比较常见的一个办法是用自己的内存管理函数来替换C语言库函数的内存管理函数。由于内存函数是自己的,你可以自己记录内存的分配和使用情况,很多事情都能做。


对于比较小的项目来说,直接把malloc和free等函数用自己的版本去替换,然后在自己的版本中在去调用系统的malloc和free函数,这样就可以完场各种记录和统计。但对于malloc和free使用比较多的项目,这样去替换就比较麻烦了,那我们怎么做呢?其实考察上面的替换过程,其实我们可以想出更好的办法,那就是直接用宏定义去替换,而不是一个一个真正去替换,把替换过程留给预处理器,下面是实现这个办法的同样做法。


首先定义一个头文件myMalloc.h,内容如下:

#ifndef __MY_MALLOC_H__

#define __MY_MALLOC_H__

#ifndef USE_MY_MALLOC

#define malloc myMalloc

#define free myFree

#endif //USE_MY_MALLOC

#endif //__MY_MALLOC_H__

然后定义一个源文件myMalloc.c

#include

#include

#define USE_MY_MALLOC

#include 'myMalloc.h'

void *myMalloc(int size)

{

printf('will be malloc %d\n', size);

return malloc(size);

}

void myFree(void *p)

{

printf('will be free.\n');

if (p)

return free(p);

}


注意这里的必须定义USE_MY_MALLOC这个宏,这是因为,我们不能把这里的malloc和free替换,毕竟我们最终还是的用系统的内存分配函数。

OK,有了上面两个文件,把他们加入编译,再把这个myMalloc.h头文件包含到需要替换的所有源文件中。对于复杂项目,由于文件比较多,可以把它放到其它通用头文件里面,这样就不用修改太多就几乎在所有源文件中都有了。做一个真正的项目遇到的事情,远不止这么一点,在此只是举个简单的例子,算是抛砖引玉,让大家对项目有所了解。


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
C语言中二级指针做参数 (转)
redis源码分析(1)内存管理
重载全局new/delete实现内存检测
如何编写无法维护的代码3
C标准库中的alloca函数
C中内存建立与释放的函数
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服