64 ビット OSは、汎用レジスタのビット幅を指します。一度に 64 ビット (データ + 操作) を処理できます。
64 ビット システムが真に有用であるためには、プログラマーが 64 ビット アプリケーションを作成する必要があることはわかっています。
しかし、32 ビット アプリケーションと 64 ビット アプリケーションの違いは何だろうか。64 ビット アプリケーションをコンパイルするために必要な構成変更を尋ねているわけではありません。代わりに、メモリ内の 2 つのアプリケーションの構造上の違いを知りたいです。
たとえば、Linux 上の C プログラムは通常、メモリ内で次のようになります。
- テキスト セグメント
- 初期化されたデータ セグメント
- 初期化されていないデータ セグメント
- ヒープ
- スタック
64 ビット アプリケーションは、メモリ内のレイアウト構造に関しては同じように見えると思いますが、各バイトのアドレス (バイト アドレス指定可能なシステムを想定) がより多くのビットを持っている点が異なります。それが本当なら、64 ビットは何を意味するのでしょうか? 単にアドレス指定可能なメモリ空間が大きいだけですか?
また、64 ビット アプリケーションがコンパイルされるときに、ソース コード内の 1 つの命令がアセンブリ コード内の add MIPS 命令にコンパイルされると仮定します。
add $1 $2 $1 // $1 += $2;
各 MIPS 命令は、正確に 32 ビットでエンコードされます。ここで質問です。アプリケーションが 64 ビット アプリとしてコンパイルされるように構成されている場合、add
命令はどのようになりますか? それはまだ32ビットですか、それともMIPSルールに違反する64ビットに拡張されていますか? それでも32ビットの場合、64ビットアプリが「64ビットOSを最大限に活用する」ためにどのような違いをもたらすかわかりません。
教えてください。