做大型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 <stdio.h>

#include <stdlib.h>

#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头文件包含到需要替换的所有源文件中。对于复杂项目,由于文件比较多,可以把它放到其它通用头文件里面,这样就不用修改太多就几乎在所有源文件中都有了。做一个真正的项目遇到的事情,远不止这么一点,在此只是举个简单的例子,算是抛砖引玉,让大家对项目有所了解。

如果对编程感兴趣,想了解更多的编程知识,解决编程问题,以及入门指导,帮你解决编程中遇到的困惑,我们这里有java高手,C++/C高手,windows/Linux高手,android/ios高手,关注微信公众号:程序员互动联盟或者coder_online,关注后输入关键字 zx 获取编程入门手册

本文属原创,禁止转载,谢谢!

原文链接:,转发请注明来源!