3

CPU情報を取得する必要があったため、このコードhttp://msdn.microsoft.com/en-us/library/hskdteyh(v=vs.80).aspxをプログラムにすばやく実装していますが、コードのこの部分に:

__cpuid(CPUInfo, 0x80000000);
    nExIds = CPUInfo[0];

次の for ループが永久にロールし始めるので、ブレーク ポイントを配置すると、ヒット カウントが増加し続け、 nExIDsが2147483656に設定されることが判明しました。機能が廃止されたなどとは書かれていないので、問題にはならないはずですよね? *__cpuid* 関数に関連するものであれば、Windows 7 Home Premium 64で実行しています。照会している CPU は、2 コア (4 論理) のIntel ( R ) Core(TM) i5 CPU M 460 @ 2.53GHz です。0x80000000以外の値を渡す必要があるかもしれません?しかし、どのように私はどのくらいを決定するのですか?

4

1 に答える 1

3

わかりました。MSDNの例にはバグがあります。機能がサポートされていない場合、負の値に設定されますが、nExIdsunsigned intであるため、負の無効な値に設定すると、自動的に設定されます。 to 2147483656 .したがって、 unsigned intの代わりにintを使用する必要があります。

于 2013-03-28T00:43:14.910 に答える