とx86
の違いを説明してください。とに関しては少し混乱します。ほとんどの場合、32 ビット プログラムは x86 で実行されるからです...x32
x64
x86
x32
公式ドキュメントで使用されている 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ビット命令を使用し
pushq
、popq
- レジスタが32ビットデータ型から設定/構成されると、次のように64ビット操作を実行できます。
adcq
- 上位 32 ビットで発生する 0 拡張に注意してください。
テストプラットフォームを探している場合は、Debian 8以降を使用できます。WikiページはDebian X32 ポートにはすべての情報が記載されています。3 秒のツアー: (1) 起動時にカーネルで X32 を有効にする、(2) を使用してdebootstrap
X32 chroot 環境をインストールする、(3)chroot debian-x32
環境に入ってソフトウェアをテストする。