10

これは私が持っている非常に基本的な疑問です。私は IT や CS の専門家ではないので、簡単な言葉で説明してください。なぜ私がその質問をしているのかというと、64 ビット OS と 32 ビット OS で 32 ビット アプリを実行できるからです。私の知る限り、64 ビットのデータ型は 32 ビット アプリの 2 倍のメモリを必要とします。また、64 ビット アプリは 64 ビット OS でのみ実行できます。それでは、わざわざ 64 ビット アプリケーションを構築する必要はありません。おそらくそれが、Firefox が 32 ビットでしか利用できない理由でしょうか??? この質問がSOの基準と一致していない場合は申し訳ありませんが、同じことについて考えるのをやめることはできません。ありがとうございました。

更新: どういうわけか混乱しているようです。なぜ 64 ビット アーキテクチャのマシンが必要なのかを質問するつもりはありませんでした。32 ビット マシンは 4GB の RAM しか使用できず、64 ビット マシンの制限ははるかに高いことがわかっています。 なぜ 64 ビット アプリケーションを構築する必要があるのか​​疑問に思っていました。

4

4 に答える 4

11

上記の明らかな理由 (主に「2 ~ 3 GB を超えるメモリを使用する」) を除けば、64 ビット用にコンパイルする理由は、x86-64 には 16 個のレジスタがあり、x86-32 には 8 個あるためです。はスタックポインタであり、多くの場合rBP「フレームポインタ」用に予約されています。実際に使用できるレジスタの数は、それぞれ 6 と 14 です。レジスタを追加すると、たとえば、レジ​​スタに渡されるパラメータの数を増やしたり、関数内のレジスタに保持する一時変数の数を増やすことができます。これは、レジスタの代わりにメモリが使用されるたびに、少なくともより複雑な命令につながり、多くの場合、追加の命令を使用する必要があるため、コードの実際の実行速度にプラスの効果があります。これにより、十分なレジスタがない場合、コードが大きくなります。

一般に、64 ビットの x86 コードは、実際のアルゴリズムを変更しなくても 5 ~ 15% 高速に実行され、通常は . 場合によっては、アルゴリズムを変更してさらに多くのことを得ることができます [たとえば、電話番号をハッシュしてからハッシュにインデックスを付けたり、代わりに 64 ビット整数値を使用したりする代わりに、「電話番号」でインデックス付けされた配列を使用できるためです。これは、「半分の操作」で 2 倍の高速化を意味します]。

アプリケーションに必要なパフォーマンスである場合は、(複数のプラットフォームで) ベンチマークする必要があります。たとえば、ポインターが大きいほど、キャッシュがすぐにいっぱいになり、「キャッシュに収まるリンク リスト エントリの数が半分しかない」ため、コードの実行が遅くなるという状況があります。

つまり、ほとんどの場合、64 ビット アプリは、同じことを行う 32 ビット アプリよりも高速です。

于 2013-04-11T12:42:22.517 に答える
6

最も重要なユースケースは、プロセスに 2 ギガバイトを超えるメモリを実際に消費したい場合です。

次に、16 ビット アプリがあまり見られなくなるのと同じように、32 ビット サポートは徐々に減少します。ただし、これは遅いプロセスです。現在、既定で 32 ビットをサポートしていない Windows Server 2008 のバージョンが 1 つあります。

最後に、64 ビットである必要がある場合もあります。これは、64 ビットのコンシューマ プロセスにロードされる任意の種類の拡張機能を構築する場合です。64 ビット プロセスは 32 ビット コードをロードできないため、64 ビット エクステンションを提供するか、コードを別のプロセスに配置する相互運用ソリューションを作成する必要があります。

于 2013-04-11T12:29:18.863 に答える
5
  • 物理メモリ

32 ビット システム アーキテクチャは、4 GB のアドレス空間のみを直接アドレス指定できます。64 ビット エディションの Windows Server を実行している 64 ビット システム アーキテクチャは、物理メモリとアドレス指定可能なメモリの両方で最大 1,024 GB をサポートできます。

  • より良い並列処理

32 ビット アーキテクチャを使用しているサーバーは、32 個の CPU に制限されています (Windows OS)。並列処理とバス アーキテクチャの改善により、64 ビット環境で最大 64 個のプロセッサをサポートできるようになり、プロセッサを追加するたびにほぼ線形のスケーラビリティが提供されます。

  • より高速なバス アーキテクチャ

64 ビット アーキテクチャは、より多くの幅広い汎用レジスタを提供するため、アプリケーション全体の速度が向上します。より多くのレジスターがある場合、永続データをメモリーに書き込み、数命令後にそれを読み戻す必要が少なくなります。また、64 ビット環境では、一度に最大 4 つの引数をレジスターで関数に渡すことができるため、関数呼び出しも高速になります。

于 2013-04-11T12:31:26.827 に答える
1

x64 では、データ型のサイズが自動的に 2 倍になることはありませんが、ポインターのサイズと同様に、プロセッサのサイズが登録されます。32 ビットを使用すると、4294967295 バイトのメモリ (~ 4 Gb) をアドレス指定できますが、これは一部のアプリケーション (データベース管理システムなど) には不十分です。

互換性の問題のため、Firefox は 32 ビットでのみ使用できます。x86 (32 ビット) アーキテクチャー用のライブラリーを作成して x64 プロセッサーから呼び出すことはできません。これらのポインターは互換性がないためです (上記のとおり)。x64バージョンx86 バージョンの両方を作成すると、テスト費用が増加します。アプリケーションが 3.5 Gb を超えるメモリをめったに使用しない場合、実際には x64 アーキテクチャのメリットはありません。

また、32 ビット プログラムは、x64 アーキテクチャでは単純に実行できません。Windows には、 Windows on Windows (WoW)、または x64/x86 インターフェイス用の WoW64と呼ばれるレイヤーがあります。さまざまなキャッシングのケースを通じて、x86 アプリケーションはネイティブの x64 アプリケーションよりも WoW で実際に高速に実行され、同じことを行っている可能性もあります。

于 2013-04-11T12:36:04.507 に答える