C 宏将值存储在自己的参数中意味着什么?

C 宏将值存储在自己的参数中意味着什么?,c,linux-kernel,x86,C,Linux Kernel,X86,rdtsc用于将Linux内核(TSC)中的64位计数器寄存器自动读取为两个32位变量。我读过Linux设备驱动程序3,它说这个宏将值(low32和high32)存储到他自己的参数中,但正如你所看到的rdtsc取void “宏将值存储到他的参数中”是什么意思?我如何获取这些变量 声明参数的作用是什么 我知道这没有道理,但我照书上说的做 long long x, y; rdtsc(x, y); // store the values into his arguments 在您发布的示例中

rdtsc
用于将Linux内核(TSC)中的64位计数器寄存器自动读取为两个32位变量。我读过Linux设备驱动程序3,它说这个宏将值(
low32
high32
)存储到他自己的参数中,但正如你所看到的
rdtsc
void

  • “宏将值存储到他的参数中”是什么意思?我如何获取这些变量

  • 声明参数的作用是什么

我知道这没有道理,但我照书上说的做

long long x, y;
rdtsc(x, y); // store the values into his arguments

在您发布的示例中,
rdtsc
是一个函数,而不是宏
DECLARE_ARGS
是一个宏,它只定义了类型为
无符号长
的两个变量(
low
high
)。该函数将返回TSC值。您没有包括
EAX\u EDX\u VAL
宏,因此它是:


#define EAX_EDX_VAL(VAL,low,high)((low)|(high)你确定这本书提到的是Linux内核函数吗?难道它不能只是伪代码或引用其他一些API吗?至于
DECLARE_ARGS
它显然会根据构建和编译器(长的大小)选择合适的64位类型。在
#define DECLARE_ARGS
之前,有一个
#ifdef CONFIG_X86_64
。源代码中有一条注释说/*使用64位值保存一条指令,清除了低值的高半部*/。您确定自本书编写以来它没有更改吗?@user253751,这可能就是我问的原因。实际代码取自最新的内核来源。嘿,谢谢。书上说
rdtsc
asm/msr.h
中的一个宏。是的,我知道
rdtsc
做什么。现在我明白了
DECLARE_ARGS
感谢你做了什么。现在我的问题是如何访问
low
high
?此外,我还从你提供的链接中选取了一些例子不要访问
low
high
。这些都是
rdtsc
函数的局部变量,只有
rdtsc
可以访问它们。但你为什么还要访问它们呢?我不想,只是好奇而已。谢谢!
long long x, y;
rdtsc(x, y); // store the values into his arguments