如何在Visual C ++中检测rdtscp支持?

问题描述 投票:1回答: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()但是没有崩溃程序?

c++ visual-c++ x86 intrinsics rdtsc
1个回答
4
投票

从MSDN for rdtscp:

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

© www.soinside.com 2019 - 2024. All rights reserved.