3

我是 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;
}
4

1 回答 1

6

它使用内联汇编调用返回 64 位整数的rdtsc操作码。高位存储到hi,低位存储到lo

在 x64 中不提供内联汇编的 Windows 和 Visual Studio 中,您将使用__rdtsc

于 2019-07-08T17:43:00.737 回答