1. ホーム
  2. performance

[解決済み] 64ビット版のプログラムは32ビット版より大きく、速いのですか?

2023-04-08 23:22:09

質問

私は x86 に焦点を当てていると思いますが、一般に 32 ビットから 64 ビットへの移行に興味があります。

論理的には、定数やポインターがより大きくなるため、プログラムがより大きくなる可能性があることは理解できます。また、効率化のためにワードの境界でメモリを割り当てたいので、割り当ての間の空白が増えることになります。

また、x86 の 32 ビットモードでは、4G アドレス空間が重複する可能性があるため、コンテキスト スイッチ時にキャッシュをフラッシュする必要があると聞いたことがあります。

では、64 ビットの本当の利点は何でしょうか。

また、補足として、128ビットの方がさらに良いのでしょうか?

編集してください。

私はちょうど私の最初の32/64ビットプログラムを書きました。16 バイト (32b 版) または 32 バイト (64b 版) のオブジェクトのリンクリスト/ツリーを作成し、標準エラー出力に多くの印刷を行います - 本当に役に立つプログラムではなく、典型的なものでもありませんが、これが私の最初のプログラムです。

サイズ: 81128(32b) v 83672(64b) - それほど大きな違いはありません。

速度: 17s(32b) v 24s(64b) - 32 ビット OS (OS-X 10.5.8) 上で実行中。

アップデート。

新しいハイブリッド x32 ABI (Application Binary Interface) が開発中で、64b ですが 32b のポインターを使用します。いくつかのテストでは、32b や 64b よりも小さなコードと高速な実行を実現しています。

https://sites.google.com/site/x32abi/

どのように解決するのですか?

32b アドレッシングが許すより多くのメモリにアクセスする必要がない限り、利点はあったとしてもわずかなものでしょう。

64b CPU で実行する場合、32b または 64b のコードを実行していても、同じメモリ インターフェイスが得られます (同じキャッシュと同じ BUS を使用します)。

x64 アーキテクチャにはより多くのレジスタがあり、より簡単に最適化できますが、ポインタがより大きくなり、ポインタを持つ任意の構造を使用すると、より高いメモリ トラフィックになるという事実によって打ち消されることがよくあります。32b と比較して 64b アプリケーションの全体的なメモリ使用量の増加は、約 15 ~ 30% と推定されます。