C语言宏与强制类型转换的妙用

来源:互联网 发布:查网站域名是否被注册 编辑:程序博客网 时间:2024/05/29 18:11

typedef struct
{    MemHead* pPre;    MemHead* pNext;    char  *File;    char  *Line;}MemHead;
static MemHead *pHead = NULL;
void *MallocDebug(char *pcFile, char *pcLine, unsigned int uiSize)
{
char *pcTemp = Malloc(uiSize + sizeof(MemHead));
MemHead *pcTempHead = (MemHead*)pcTemp;
pcTempHead->pcFile = pcFile;
pcTempHead->pcLine = pcLine;
{
将pcTempHead 插入到以pHead为头结点中的双向链表中去;
}
return (void *)(pcTemp + sizeof(MemHead));
}
void FreeDebug(void *ptr)
{
char *pcTemp = ptr - sizeof(MemHead);
MemHead *pTempHead = (MemHead *)pcTemp;
{
将pTempHead从双向链表中取下;
}
Free(ptr);
}
#define Malloc(x) MallocDebug(_FILE_,_LINE_,x)
#define Free(ptr)FreeDebug(ptr)

在此,还缺少一些细节方面,和一个检测的打印函数,留给读者思考,就不详述了。此段代码,个人认为,最为有特点的一是使用宏替换,这样,可以最简便地将代码中Malloc内存的地方取到。第二,用一个强制类型转换,将我们要的MemHead节点与函数调用Malloc内存分配所需的内存连接到一处去,从而达到了两点:一,降低了系统开销,无需再给MemHead链表单独分配一段内存;二,不需要一个ptr指向所需分配的地址,从而在FreeDebug中无需再查找一边,降低系统开销,也增加了代码的可读性。

以上两点,仅为抛砖引玉。希望能对读者有一丝启发。也请大牛不吝指教!



原创粉丝点击