x86
、x32
、およびx64
の違いを説明してください。 x86
とx32
に関しては、ほとんどの場合32ビットプログラムがx86で実行されるため、少し混乱します...
x86は、PCで使用されたIntelプロセッサアーキテクチャを指します。モデル番号は8088(8086の8ビットバスバージョンで、最初のIBM PCで使用)、8086、286、386、486でした。その後、AMDがプロセッサ名をコピーしないように、番号ではなく名前に切り替えました。 Pentiumなど、決してHexiumではありません:)。
x64は、64ビットコードを有効にするx86命令セットの拡張機能のアーキテクチャ名です。 AMDが発明し、後にIntelが自社の64ビットArchを競争力のあるものにできないとコピーしたため、Itaniumはうまくいきませんでした。他の名前はx86_64で、AMDの元の名前であり、オープンソースツールで一般的に使用されています。 AMDの次の名前であり、Microsoftツールで一般的に使用されているAMD64。 Intel自身の名前(EM64Tおよび "Intel 64")は決してキャッチされませんでした。
x32は、ハードウェアに関連付けられていないファジー用語です。 「32ビット」または「32ビットポインターアーキテクチャ」を意味するために使用される傾向があり、Linuxにはその名前のABIがあります。
HansとDarkDustの回答はi386/i686とAMD64/x86_64を対象としているため、それらを再訪する意味はありません。この答えはX32に焦点を当て、X32移植後に学んだ情報を提供します。
x32は、32ビット整数、ロング、およびポインターを使用するAMD64/x86_64 CPU用のABIです。アイデアは、32ビットデータ型の小さなメモリとキャッシュフットプリントを、x86_64の大きなレジスタセットと組み合わせることです。 (参照: Debian X32 Portページ )。
x32では、メモリ使用量が最大約30%削減され、速度が最大約40%向上します。アーキテクチャの使用例は次のとおりです。
x32はやや最近の追加です。カーネルサポート(3.4以上)、ディストリビューションサポート(以下を参照)、libcサポート(2.11以上)、およびGCC 4.8以上(アドレスサイズプレフィックスサポートの改善)が必要です。
ディストリビューションの場合、Ubuntu 13.04またはFedora 17で使用可能になりました。カーネルサポートは、0x00000000から0xffffffffの範囲内にあるポインターのみを必要としました。 System Vアプリケーションバイナリインターフェイス、AMD64(LP64およびILP32プログラミングモデルを使用) 、セクション10.4、p。 132(その唯一の文):
10.4カーネルサポート
カーネルは、システムコールから返されるスタックとアドレスを0x00000000〜0xffffffffの間に制限する必要があります。
bootingがサポートされているカーネルの場合、syscall.x32=y
オプションを使用する必要があります。カーネルをbuildingする場合、CONFIG_X86_X32=y
オプションを含める必要があります。 (参照: Debian X32 Portページ および X32 System Vアプリケーションバイナリインターフェイス )。
Debianの人々がテスト後にいくつかのバグを報告してから、最近の移植を通じて私が学んだことの一部を以下に示します。
__x86_64__
(およびフレンド)and__ILP32__
を定義しますが、 __i386__
/__i686__
(および友人)ではありません__ILP32__
を単独で使用することはできません。ClangおよびSun Studioで予期せず表示されるためですpushq
およびpopq
を使用する必要がありますadcq
のように、それらに対して64ビット操作を実行できます。テストプラットフォームを探している場合は、Debian 8以降を使用できます。 Debian X32 Port のwikiページにはすべての情報があります。 3秒間のツアー:(1)起動時にカーネルでX32を有効にします。 (2)debootstrap
を使用してX32 chroot環境をインストールし、(3)chroot debian-x32
を使用して環境に入り、ソフトウェアをテストします。
x86
はIntel 80x86互換を意味します。これには、16ビットのみのプロセッサである8086が含まれていました。現在では、32ビットのIntel互換命令セット(通常はPentium以降のもの)を搭載したCPUをほぼ意味しています。読まないx32
使用されています。
x64
は、x86
互換性がありますが、64ビットモードもあります(ほとんどの場合、AMDによって導入された64ビット命令セットが意味されます。 )。
そのため、ほとんどの場合、次のように簡略化できます:x86
は32ビットモードでIntelと互換性があり、x64
は、64ビットモードでIntel互換です。