我必须将一些c代码解释为一种功课,我不太了解这个宏:
#define rdtscll(val)__asm__ __volatile__("rdtsc":"=A"(val))
我知道它是某种名为rdtscll
的静态函数,它接收一个参数val
。但其余的呢?
__asm__
和__volatile__
以及这些下划线的原因?答案 0 :(得分:2)
在这种情况下,__asm__
和__volatile__
是用于将汇编语句嵌入C文件的编译器扩展。两个主要下划线是为了防止用户代码中的标识符冲突,并且尾随是纯粹的选择。 __volatile__
只是一个“反优化”指令。
rdtsc
是用于读取时间戳计数器的x86指令,这是一个基于时钟周期的超高速计数器。 "=A"
是GCC内联汇编语法的一部分 - 有很多参考资料解释了它的更多信息。