关于包装器宏功能的问题

时间:2010-08-05 10:49:11

标签: c macros

我正在阅读jemalloc的realloc函数,并注意到jemalloc中的所有非静态函数(至少是我见过的函数)都包含在JEMALLOC_P宏中,而JEMALLOC_P是:

#define JEMALLOC_P(s) s

为什么他们需要这样的东西?

2 个答案:

答案 0 :(得分:1)

您应该查看该行所在的上下文。代码实际上是:

#ifndef JEMALLOC_P
#  define JEMALLOC_P(s) s
#endif

这意味着,在包含头文件之前,您可以提供JEMALLOC_P()的版本。如果你没有这是默认值。

答案 1 :(得分:1)

来自jemalloc configure脚本:

AC_DEFINE_UNQUOTED([JEMALLOC_P(string_that_no_one_should_want_to_use_as_a_jemalloc_API_prefix)], [${JEMALLOC_PREFIX}##string_that_no_one_should_want_to_use_as_a_jemalloc_API_prefix])

我猜它的目的是为所有jemalloc函数提供一个前缀。

您还会在jemalloc.h中看到类似的内容:

void *JEMALLOC_P(malloc)(size_t size)

因此,默认情况下,jemalloc会接管malloc()名称,但如果您仍然需要使用普通malloc(),那么您可以

#define JEMALLOC_P(s) je_##s

同时获取je_malloc()和普通malloc()