C++ 如何在visualc++;?

C++ 如何在visualc++;?,c++,visual-c++,x86,intrinsics,rdtsc,C++,Visual C++,X86,Intrinsics,Rdtsc,我在MSVC 2012上运行了一段代码: #include <windows.h> #include <intrin.h> UINT64 gettime() { try { unsigned int ui; return __rdtscp(&ui); } catch (...) { return __rdtsc(); } } #包括 #包括 UINT64 gettime(){ 试一试{ 未签名的INTUI; 返回u rd

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

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

UINT64 gettime() {
 try {
     unsigned int ui;
     return __rdtscp(&ui);
 }
 catch (...) {
     return __rdtsc();
 }
}
#包括
#包括
UINT64 gettime(){
试一试{
未签名的INTUI;
返回u rdtscp(&ui);
}
捕获(…){
返回uu rdtsc();
}
}
我试图使用u rdtscp()来获取时间戳;但是,在不支持u rdtscp()的平台上,我想切换到u rdtsc()

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

来自MSDN for rdtscp:

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

来自MSDN for rdtscp:

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