我正在阅读jemalloc的realloc函数,并注意到jemalloc中的所有非静态函数(至少是我见过的函数)都包含在JEMALLOC_P宏中,而JEMALLOC_P是:
#define JEMALLOC_P(s) s
为什么他们需要这样的东西?
答案 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()
。