4

64 ビット OSは、汎用レジスタのビット幅を指します。一度に 64 ビット (データ + 操作) を処理できます。

64 ビット システムが真に有用であるためには、プログラマーが 64 ビット アプリケーションを作成する必要があることはわかっています。

しかし、32 ビット アプリケーションと 64 ビット アプリケーションの違いは何だろうか。64 ビット アプリケーションをコンパイルするために必要な構成変更を尋ねているわけではありません。代わりに、メモリ内の 2 つのアプリケーションの構造上の違いを知りたいです。

たとえば、Linux 上の C プログラムは通常、メモリ内で次のようになります。

  1. テキスト セグメント
  2. 初期化されたデータ セグメント
  3. 初期化されていないデータ セグメント
  4. ヒープ
  5. スタック

64 ビット アプリケーションは、メモリ内のレイアウト構造に関しては同じように見えると思いますが、各バイトのアドレス (バイト アドレス指定可能なシステムを想定) がより多くのビットを持っている点が異なります。それが本当なら、64 ビットは何を意味するのでしょうか? 単にアドレス指定可能なメモリ空間が大きいだけですか?

また、64 ビット アプリケーションがコンパイルされるときに、ソース コード内の 1 つの命令がアセンブリ コード内の add MIPS 命令にコンパイルされると仮定します。

add $1 $2 $1 // $1 += $2;

各 MIPS 命令は、正確に 32 ビットでエンコードされます。ここで質問です。アプリケーションが 64 ビット アプリとしてコンパイルされるように構成されている場合、add命令はどのようになりますか? それはまだ32ビットですか、それともMIPSルールに違反する64ビットに拡張されていますか? それでも32ビットの場合、64ビットアプリが「64ビットOSを最大限に活用する」ためにどのような違いをもたらすかわかりません。

教えてください。

4

1 に答える 1

3

まず、質問に MIPS のタグを付けましたが、一般的な質問をします。MIPS での 64 ビット アプリのレイアウトは、他の 64 ビット アーキテクチャとは異なります。しかし、レイアウトは、あなたが言ったようなセグメントではなく、メモリ内での配置方法です。これらのセグメントは単なるメモリ「ゾーン」であり、ほとんどすべてのアーキテクチャの実行可能ファイルにこれらのセグメントがあります

64 ビット アーキテクチャは、単にアドレス指定可能なメモリの「範囲を拡張する」だけでなく、新しい命令セットも提供します。一部の古い命令は 64 ビット データでは機能しないため、対処する新しい命令を作成する必要があります。

命令については、MIPS 64 ビットは引き続き 32 ビット命令を使用します。64ビットに拡張された場合、追加された32ビットには何が含まれますが、他の32ビットはすべての引数を表すのに(多少冗長ではないにしても)すでに十分でした。しかし、もちろん、64 ビット数に対する多くの新しい命令がありました (31 を超えるシフトやダブルワードのロード/ストアなど...)。ところで、命令は正しくありません,

于 2013-12-19T14:20:59.617 に答える