編集:命題が不可能であることがわかりました(すぐに指摘してくれたBen Voigtに感謝します)。後世のために、AMDの拡張機能に関する私の以前の誤解を除いて、基本的な質問を次に示します。
(特に Windows) ソフトウェアの 32 ビット ビルドが 64 ビット プロセッサの存在を検出し、64 ビット オペランドと、存在する場合はより大きなレジスタ ファイルを使用するのが一般的かどうか疑問に思っていました。これは、そのような CPU が物理的に存在する場合に i386 上の 16 ビット プロセスが 32 ビット命令を利用することが可能であったのとほぼ同じ方法で、32 ビット プロセスが 64 ビット命令を利用することが実際に可能であると想定していました。エンコーディング オーバーライド プレフィックスを介して。ただし、以下の回答で指摘されているように、これは不可能です。
なぜ 64 ビットの命令を使用し、32 ビットのアドレッシングを使用するのでしょうか?
さて、作業しているデータセットがそのアドレス空間に収まるほど小さいことがわかっているとしましょう。たとえば、プログラムの 64 ビット バージョンを使用しており、それを使用している目的に対して、パフォーマンス モニタリングは、プロセスが 2GB 以下を使用していることを示します。(実際には、これによると、IMAGE_FILE_LARGE_ADDRESS_AWARE フラグが設定された 32 ビット プロセスは、64 ビット Windows で 4GB のユーザー空間を取得します。)
それは問題ではないと考える人もいますが、実際にはそうかもしれません。64 ビット ビルドでは、私の間違いでなければ、プログラムが格納するすべてのポインターが、必要な物理 RAM の 2 倍を消費します。 プログラムが多くのポインターを使用する場合 (たとえば、リンクされたリストやハッシュ テーブルが原因で)、これが加算されてキャッシュ効率が低下する可能性があります。
残念ながら、以下の Ben Voigt の回答で指摘されているように、Windows ではまったく不可能ですが、この目的専用のモードが Linux で行われています。