c++ - 如何检测 Visual C++ 中的 rdtscp 支持?

标签 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();
 }
}

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

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

最佳答案

来自 rdtscp 的 MSDN:

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

关于c++ - 如何检测 Visual C++ 中的 rdtscp 支持?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25149358/

相关文章:

c++ - 输入无符号short范围之外的整数后,打印无符号short值的规则是什么?

c++ - Qt - 在 QGraphicsScene 中如何使用 itemAt 找到透明项目?

C++——FindWindow win32 API 总是失败!

c - 如何在不使用BIOS的情况下将数据写入显卡?

x86 - 使用AVX2收集指令时的加载地址计算

c++ - C++类中对象计数的静态变量?

c++ - Visual C++::'malloc' 中的奇怪错误:函数不带 1 个参数

c++ - 函数模板中的数组类型推导

c++ - wifstream.tellg() 在流中的前进位置?

assembly - MASM:在 .data 声明中使用当前位置计数器 ($)