6

i386 と AMD64 のアプリケーション バイナリ インターフェイス (ABI) 間のデータ型のすべての違いはどこにありますか?

long 型は、i386 ABI では 32 ビット、AMD64 では 64 ビットであることを知っています。これは正しいです?

4

2 に答える 2

9

Agner Fog 博士の最適化マニュアルをダウンロードすることをお勧めします。彼は、特に ABI とその違いに関するマニュアルを持っています。

32 ビット モードと 64 ビット モードの命令セットの違いについては、Intel と AMD の両方の取扱説明書で、入門巻または命令巻の後の巻 ( Intel の命令セット リファレンスの場合は 2a と 2b、または 2 とAMD の場合は3です。)

タグ wikiの他のリンクも参照してください。

于 2011-04-05T18:17:09.443 に答える
5

ABI のすべての詳細が必要な場合: サブルーチンの呼び出し規約、渡されたものを取得するレジスタ、戻り時に復元する必要があるレジスタ、例外処理-- これはまったく異なります。Microsoft から Windows 用にダウンロードできるドキュメントがあります。アビ。

一方、データ型だけに関心がある場合は、次のようなプログラムを作成するのに数分しかかかりません。

fprintf (stdout, "size of int is %d\n", sizeof(int));
fprintf (stdout, "size of long int is %d\n", sizeof(long int));
// etc.

4/7/11を編集して応答します。

このリンクhttp://msdn.microsoft.com/en-us/library/7kcdt6fy.aspxは現在機能しています。MSFT が明日動かないという約束はありません! または Google「アプリケーション バイナリ インターフェース サイト:microsoft.com」

Windows 以外のすべての x86-64 OS は、x86-64 System V psABI を使用します。X86-64 ABI はどこに文書化されていますか?を参照してください。

ABI は、ハードウェア アーキテクトではなく、オペレーティング システムとコンパイラによって定義されます。たとえば、C/C++ int が 32 ビットで along intが 64 (x86-64 System V) かどうか、または両方が 32 ビット (x64 Windows) であるか、または int が64 であり、long int も 64 です (一部の Fortran コンパイラが行うように)。または、int が 64 で long int が 128 であるか、想像できるその他の組み合わせです。Intel と AMD は推奨を行うことができますが、コンパイラの作成者と OS ベンダーが管理しています。

于 2011-04-05T16:17:50.657 に答える