x86、x32、x64 アーキテクチャの違いは何ですか? 質問する

x86、x32、x64 アーキテクチャの違いは何ですか? 質問する

x86の違いを説明してください。とに関しては少し混乱します。ほとんどの場合、32 ビット プログラムは x86 で実行されるからです...x32x64x86x32


公式ドキュメントで使用されている IA-32 などの用語もカバーする関連/重複の可能性があるもの:

ベストアンサー1

Hans と DarkDust の回答では i386/i686 と amd64/x86_64 が取り上げられているため、これらを再度取り上げる意味はありません。この回答では X32 に焦点を当て、X32 の移植後に得られた情報をいくつか提供します。

x32 は、32 ビットの整数、long、ポインターを使用する amd64/x86_64 CPU 用の ABI です。32 ビット データ型のより小さなメモリとキャッシュ フットプリントを、x86_64 のより大きなレジスタ セットと組み合わせるというアイデアです。(参照:Debian X32 移植ページ)。

x32 は、メモリ使用量を最大約 30% 削減し、速度を最大約 40% 向上させることができます。このアーキテクチャの使用例は次のとおりです。

  • vserver ホスティング (メモリバウンド)
  • ネットブック/タブレット(メモリ、パフォーマンスが低い)
  • 科学的タスク(パフォーマンス)

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 の間に制限する必要があります。

いつ起動中カーネルがサポートされていないsyscall.x32=y場合は、オプションを使用する必要があります。建物カーネルの場合は、CONFIG_X86_X32=yオプションを含める必要があります。(参照:Debian X32 移植ページそしてX32 System V アプリケーションバイナリインターフェイス)。


Debian の人たちがテスト後にいくつかのバグを報告してくれた後、最近の移植を通して私が学んだことのいくつかを次に示します。

  • このシステムはX86によく似ている
  • プリプロセッサは__x86_64__(および仲間の)を定義するそして __ILP32__、しかしそうではない__i386__/ __i686__(そして友人たち)
  • __ILP32__ClangとSun Studioでは予期せず表示されるため、単独では使用できません。
  • スタックを操作するときは、64ビット命令を使用しpushqpopq
  • レジスタが32ビットデータ型から設定/構成されると、次のように64ビット操作を実行できます。adcq
  • 上位 32 ビットで発生する 0 拡張に注意してください。

テストプラットフォームを探している場合は、Debian 8以降を使用できます。WikiページはDebian X32 ポートにはすべての情報が記載されています。3 秒のツアー: (1) 起動時にカーネルで X32 を有効にする、(2) を使用してdebootstrapX32 chroot 環境をインストールする、(3)chroot debian-x32環境に入ってソフトウェアをテストする。

おすすめ記事