gpt4 book ai didi

c - 这段代码在 GCC 中是什么意思?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:55:12 30 4
gpt4 key购买 nike

我正在追踪 malloc() 在 GCC 中所做的事情。

我从公共(public) malloc void* __libc_malloc(size_t bytes) 函数开始,它调用 arena_lookup(),在 arena.c 中找到:

void* __libc_malloc(size_t bytes)
{
mstate ar_ptr;
void *victim;
void *(*hook) (size_t, const void *) = force_reg (__malloc_hook);
if (__builtin_expect (hook != NULL, 0))
return (*hook)(bytes, RETURN_ADDRESS (0));

arena_lookup(ar_ptr);
.
.
}

下面是函数arena_lookup(),我插入了调用的每个函数的定义(虚线包含函数定义的每个级别):

#define arena_lookup(ptr) do { \
void *vptr = NULL; \
ptr = (mstate)tsd_getspecific(arena_key, vptr); \

//tsd_getspecific-----------------------------------------------------------------------------------------
#define tsd_getspecific(key, vptr) ((vptr) = __libc_tsd_get (void *, MALLOC))

//__libc_tsd_get-----------------------------------------------------------------------------------------
#define __libc_tsd_get(TYPE, KEY) \
(*__libc_tsd_address (TYPE, KEY))

//__libc_tsd_address-----------------------------------------------------------------------------------------
#define __libc_tsd_address(TYPE, KEY) (&__libc_tsd_##KEY)
//-----------------------------------------------------------------------------------------
} while(0)

我最终在 libc-tsd.h 中使用 __libc_tsd_address(TYPE, KEY) 定义 (&__libc_tsd_##KEY),但是 < strong>我不明白这段代码是什么意思?

最佳答案

这是 token 粘贴或 token 串联,描述为here .它连接预处理器标记以创建一个新标记以供 C 编译器处理。如果它被称为

__libc_tsd_address(void *, MALLOC)

它扩展为:

&__libc_tsd_MALLOC

或者如果 MALLOC 也是一个定义的宏,它的扩展将在那里被替换。

关于c - 这段代码在 GCC 中是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20829466/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com