0

プロセスはWOW64として実行されておらず、x64環境ではx64として実行されています。コードは次のとおりです

    DWORD64 dwProcessAffinity, dwSystemAffinity;
    GetProcessAffinityMask(GetCurrentProcess(), &dwProcessAffinity, &dwSystemAffinity);

確認として、IsWow64はfalseを返しています。作成された環境には、100を超えるプロセッサの数があります。

4

1 に答える 1

3

GetProcessAffinityMask の戻り値は BOOL であるため、呼び出しが TRUE を返した場合、呼び出しは成功しています。プロセス アフィニティ用とシステム アフィニティ用の 2 つのマスクがあります。マスクの各ビットはプロセッサに対応します。たとえば、マスク 0x10 はプロセッサ 4 を意味し、マスク 0x03 はプロセッサ 0 と 1 を意味します。 、(元の開発者による) 後のプログラマーが結果を符号付き整数としてではなく符号なし 16 進シーケンスとして表示することを保証する試みがあった可能性があります。さらに、この型はマスクのサイズを適切に調整します (次の段落を参照)。

Windows 2003 が開発されていたとき、32 個のプロセッサのシステムを持つことさえ非常にまれであったため、32 (32 ビット バージョンの場合) と 64 (64 ビット バージョンの場合) の制限を設定することは合理的でした。2008 年の時点でさえ、Windows 2008 R2 のプロセッサ制限を引き上げることについてはまだ議論がありました。現在は 256 をサポートしていますが、さらに高くなる可能性があります。Windows 2003 の実行には 10 年前のテクノロジが使用されているため、当時の新しいテクノロジに関していくつかの制限が予想されます。

ハイパースレッディング (HT) は興味深いテクノロジーです。別の論理スレッドをサポートするために追加のハードウェアを追加することには、いくつかの利点があります。X が物理プロセッサで、Y が HT の「アドオン」であるとは言えないため、OS の場合、2 つの論理プロセッサを区別することはできないことを理解してください。ハードウェアは X と Y を共有リソースの同等のパートナーとして扱うため、OS はこれらを同等に認識します。

あなたの状況に関する最後の不確実性として、Windows 2003 が使用する 80 個の論理プロセッサのサブセットをお伝えすることはできません。32 HT ペアが必要な場合もあれば、物理 40 ペアが必要で 24 の論理 HT ユニットが含まれる場合もあります。GetLogicalProcessorInformationを実行することで、それに答えることができます。

于 2012-06-19T13:36:14.403 に答える