我是C ++和基准测试的新手
我不明白代码的这一部分做什么? 因此,我找到了一些有关edx,eax寄存器的信息,但我不完全了解它如何在代码中发挥作用。所以我理解这段代码本质上返回了cpu周期的当前滴答声。因此,它是否将当前的滴答存储到寄存器中,其中一部分存储在hi中,另一部分存储在lo中。并且,“ = a”和“ = d”是否指定了将其存储在哪个寄存器中。
将它分为两部分有什么意义?
"rdtsc" : "=a" (lo), "=d" (hi)
上下文中的代码
int64_t rdtsc(){
unsigned int lo,hi;
__asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi));
return ((uint64_t)hi << 32) | lo;
}
答案 0 :(得分:6)
它使用inline assembly来调用rdtsc操作码,该操作码返回64位整数。高位存储到hi
,低位存储到lo
。
在Windows和Visual Studio中,内联汇编在x64中不可用,您应该使用__rdtsc。