1

我在 MSVC 2012 上运行了一段代码:

#include <windows.h>
#include <intrin.h> 

UINT64 gettime() {
 try {
     unsigned int ui;
     return __rdtscp(&ui);
 }
 catch (...) {
     return __rdtsc();
 }
}

我试图使用 __rdtscp() 来获取时间戳;但是,在不支持 __rdtscp() 的平台上,我想改用 __rdtsc() 。

上面的代码不起作用;如果不支持 __rdtscp()(在某些 VM 上),程序就会崩溃。那么有什么方法可以检测 __rdtscp() 是否受支持,但不会导致程序崩溃?

4

1 回答 1

4

来自 rdtscp 的 MSDN:

要确定对该指令的硬件支持,请使用 InfoType=0x80000001 调用 __cpuid 内部函数并检查 CPUInfo[3] (EDX) 的第 27 位。如果支持该指令,则该位为 1,否则为 0。

于 2014-08-05T22:33:12.537 回答