我是 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;
}
It uses 内联组装 https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html打电话给rdtsc https://en.wikipedia.org/wiki/Time_Stamp_Counter返回 64 位整数的操作码。高的部分被存储到hi
和低至lo
.
在 Windows 和 Visual Studio 中,内联汇编在 x64 中不可用,您可以使用__rdtsc https://learn.microsoft.com/en-us/cpp/intrinsics/rdtsc?view=vs-2019.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)