如何检测Visual c++中对rdtscp的支持



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

#include <windows.h>
#include <intrin.h> 
UINT64 gettime() {
 try {
     unsigned int ui;
     return __rdtscp(&ui);
 }
 catch (...) {
     return __rdtsc();
 }
}

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

上面的代码不起作用;如果不支持__rdtscp(),程序就会崩溃(在某些虚拟机上)。那么,是否有任何方法可以检测是否支持__rdtscp(),但不会使程序崩溃?

From MSDN for rdtscp:

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

相关内容

  • 没有找到相关文章

最新更新