64 ビット データ型で算術演算を実行するのに 64 ビット プロセッサは必要ありません。私が知っているすべての 32 ビット コンパイラは、64 ビット整数の算術演算をサポートしています。ハードウェアがネイティブ演算を許可しない場合、コンパイラは演算を行うコードを生成する必要があります。通常、これはコンパイラの RTL のサポート関数を利用します。
この構造体は、64 ビット データ型のネイティブ サポートを提供しないコンパイラで使用するためのものです。あなたがリンクしたドキュメントそのものがそれを明確にしています:
注 C コンパイラは、64 ビット整数をネイティブにサポートしている場合があります。たとえば、Microsoft Visual C++ は__int64サイズの整数型をサポートしています。詳細については、C コンパイラに付属のドキュメントを参照してください。
ネイティブの 64 ビット整数をサポートしないコンパイラは、QUADPART
共用体メンバーを整数として扱うことができません。
typedef union _ULARGE_INTEGER {
struct {
DWORD LowPart;
DWORD HighPart;
};
struct {
DWORD LowPart;
DWORD HighPart;
} u;
ULONGLONG QuadPart;
} ULARGE_INTEGER, *PULARGE_INTEGER;
そして の定義ULONGLONG
:
#if !defined(_M_IX86)
typedef unsigned __int64 ULONGLONG;
#else
typedef double ULONGLONG;
#endif
もちろん、過去 10 年 (またはそれ以上) に作成されたすべてのコンパイラは、64 ビット整数をネイティブでサポートします。しかし、この共用体はもともとかなり前に導入されたものであり、コンパイラの状況は当時とは異なっていたでしょう。Windows ヘッダー ファイルを見るときは、常に歴史と遺産を念頭に置いてください。