9

アーキテクチャごとに C を再コンパイルする必要があるのはなぜですか? とにかく、すべてがビットとバイト、ロードとジャンプになってしまうのではありませんか? どのアーキテクチャも基本的に、最も基本的なコマンドを同じように実行するのではないでしょうか?

4

5 に答える 5

11
  1. CPU が異なれば、命令アーキテクチャも異なります (x86 と ARM など)。
    • 初期の Mac は Motorola 68k アーキテクチャを使用していました。後のものは PowerPC を使用しました。さらに後のものはx86を使用しました。これらの移行のたびに、開発者は実行可能ファイルをファット バイナリとして出荷する必要がありました。これには、両方のアーキテクチャのオブジェクト コードが含まれます。
  2. 現在の x86 CPU には、32 ビット モードと 64 ビット モードがあります。
    • これが、Windows、Ubuntu などの 32 ビット バージョンと 64 ビット バージョンがある理由です。
  3. 異なるオペレーティング システムは、異なるシステム コール、ライブラリなどを提供します。
    • OSのバージョンが異なれば、提供されるシステム コールやライブラリなども異なります (ただし、OS ベンダーは可能な限り下位互換性を維持することを目指しています)。
  4. 同じオペレーティング システムであっても、異なるコンパイラ間で呼び出し規約が同じであるとは限りません。
    • 同じOSでも実行ファイルの形式が異なる場合があります。たとえば、多くの Unix システムでは、a.out が使用されていたフォーマットでしたが、最終的にほとんどが ELF に切り替わりました。移行期間中、ライブラリは両方の形式で提供する必要がありました。
于 2013-08-11T11:14:07.503 に答える
2

どのアーキテクチャも基本的に、最も基本的なコマンドを同じように実行するのではないでしょうか?

ほとんどの場合。ただし、これらの基本的なコマンドは、異なる方法で表現または実装されています。C コンパイラは、正しい表現と実装が使用されていることを確認する責任があります。

于 2013-08-11T11:13:24.227 に答える
2

はい。ただし、これらすべてのロードやジャンプなどは、プラットフォームによって異なって見えます。各 CPU ファミリには、独自のコマンド セットがあります。

より高いレベルでは、ハードウェアが同じでも OS (Linux/Windows など) が異なる場合、ライブラリや実行可能ファイル形式などが異なります。

これらはすべて、コンパイラとリンカが従わなければならないものです。

于 2013-08-11T11:13:50.803 に答える
1

しかし、すべてのマシンには独自の命令セットがあります

于 2013-08-11T11:13:13.583 に答える