关于alloc_assist.h文件中宏的理解

在学习源码的时候,看到了有些地方使用以下的宏:

MEMCPY(buf + pos, src.get_number_digits(), number_size);

点进去查看,发现为以下内容:

#define MEMSET(s, c, n) memset(s, c, n)
#define MEMCPY(dest, src, n) memcpy(dest, src, n)
#define MEMCCPY(dest, src, c, n) memccpy(dest, src, c, n)
#define MEMMOVE(dest, src, n) memmove(dest, src, n)
#define BCOPY(src, dest, n) bcopy(src, dest, n)
#define MEMCMP(s1, s2, n) memcmp(s1, s2, n)
#define MEMMEM(s1, n1, s2, n2) memmem(s1, n1, s2, n2)
#define STRCPY(dest, src) strcpy(dest, src)
#define STRNCPY(dest, src, n) strncpy(dest, src, n)

这样的话仅仅是在预处理的时候做出替换,例如将文件中MEMCMP(s1, s2, n)替换为 memcmp(s1, s2, n),那么这个文件存在的意义是什么??求助各位大佬。

一种开发习惯吧,目前确实没啥用,因为还有裸用memset而不是MEMSET的。

但如果都用MEMSET而不是memset,那么假如嫌弃memset慢想做一些优化或者诊断功能时,就可以比较方便地通过改宏达到目的了。

#define MEMSET(s, c, n) \
{ \
do_something(); \
memset(); \
}

比如你可以看一下deps/oblib/src/lib/thread/ob_tenant_hook.cpp,就只能通过dlsym这种比较麻烦的方式来做hook了,但如果当初大家都写成PTHREAD_MUTEX_LOCK而不是pthread_mutex_lock,改起来就比较方便了。

2 个赞

理解了,感谢大佬 :100: :100: