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() がサポートされているかどうかを検出できますが、プログラムをクラッシュさせる方法はありますか?

4

1 に答える 1

4

rdtscp の MSDN から:

この命令のハードウェア サポートを確認するには、InfoType=0x80000001 で __cpuid 組み込み関数を呼び出し、CPUInfo[3] (EDX) のビット 27 を確認します。このビットは、命令がサポートされている場合は 1、サポートされていない場合は 0 です。

于 2014-08-05T22:33:12.537 に答える