ディスク入出力に頼らず、物理メモリー内で直接大量のデータを処理できるということは、おそらく、
64 ビット・マシンのパフォーマンス上最大の利点でしょう。
しかし、アプリケーションによっては、64 ビット・モードで再コンパイルしたときよりも、
32 ビット・モードでコンパイルした方が優れたパフォーマンスを示す場合があります。
これには次のようないくつかの理由があります。
- 64 ビット・プログラムの方が大きい。プログラム・サイズの増加により、物理メモリーの要求がより大きくなります。
- 64 ビットの long 型除法の方が、32 ビットの整数除法よりも時間がかかる。
- 32 ビットの符号付き整数を配列指標またはループ・カウントとして使用する 64 ビット・プログラムの場合、配列が参照されるたび、またはループ・カウントが増分されるたびに、符号拡張を行うための追加の命令が必要になる場合がある。
64 ビット・プログラムのパフォーマンス上の不利を補うには、次のような方法があります。
- 32 ビットと 64 ビット混合の演算を行わないようにする。例えば、 32 ビットのデータ型と 64 ビットのデータ型を加算する場合は、32 ビットの方を符号拡張し、レジスターの上位 32 ビットをクリアまたは設定する必要があります。このため、計算が遅くなります。
- 頻繁にアクセスされる変数 (ループ・カウンター、配列指標など) には、
signed、unsigned、および単純な int などの型ではなく、
long 型を使用する。このようにすると、コンパイラーが、配列参照、関数呼び出し中のパラメーター、
および戻される関数結果を、切り捨てたり符号拡張したりする必要がなくなります。