我们在面对一个大项目时,会常常因为各种内存问题导致很多麻烦事情,调试内存的分配与释放是很常见的事情,其中比较常见的一个办法是用自己的内存管理函数来替换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 获取编程入门手册
本文属原创,禁止转载,谢谢!
