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

Posted

技术标签:

【中文标题】如何检测 Visual C++ 中的 rdtscp 支持?【英文标题】:How to detect rdtscp support in Visual C++? 【发布时间】:2014-08-05 22:26:48 【问题描述】:

我有一段代码在 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() 是否受支持,但不会导致程序崩溃?

【问题讨论】:

【参考方案1】:

来自 MSDN 的 rdtscp:

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

【讨论】:

以上是关于如何检测 Visual C++ 中的 rdtscp 支持?的主要内容,如果未能解决你的问题,请参考以下文章

如何跟踪 Visual Studio 2017(C++)中的内存使用情况?

检测是不是安装了 Visual C++ Redistributable for Visual Studio 2013

Visual C++编程技巧之六

是否有任何工具可以检测 Visual C++ 6.0 上的缓冲区溢出? [关闭]

Visual Leak Detector 2 2 3 Visual C++内存检测工具

gcc __rdtscp 文档