分享

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

 cntagu 2016-05-05

我们在面对一个大项目时,会常常因为各种内存问题导致很多麻烦事情,调试内存的分配与释放是很常见的事情,其中比较常见的一个办法是用自己的内存管理函数来替换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头文件包含到需要替换的所有源文件中。对于复杂项目,由于文件比较多,可以把它放到其它通用头文件里面,这样就不用修改太多就几乎在所有源文件中都有了。做一个真正的项目遇到的事情,远不止这么一点,在此只是举个简单的例子,算是抛砖引玉,让大家对项目有所了解。


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多