Unix/Linuxにおける32bitバイナリと64bitバイナリの構造的な差異を教えてください。

具体的には、リンクするライブラリ、システムコール、メモリ空間、C言語intの幅などを
整理して理解したいです。

回答の条件
  • 1人2回まで
  • 登録:2008/05/19 14:13:18
  • 終了:2008/05/23 12:04:07

ベストアンサー

id:tera-p No.1

tera-p回答回数92ベストアンサー獲得回数212008/05/20 03:29:36

ポイント70pt

http://www.valinux.co.jp/contents/tech/techlib/eos/linux64/linux... が良くまとまっていると思いますが,64bit バイナリは 64bit CPU の特長である 64bit レジスタや 64bit メモリアドレス空間を利用した(正確にはこれらを利用できるモードで動作する)プログラム,32bit バイナリはそれらを利用しないプログラムになります.

C でプログラミングするときの最も注意すべき違いは,long int と void* の幅が 64bit になるところです(LP64 データモデルの場合;ちなみに LP64 では int 幅は 32bit のままで変わりません).void* が 64bit になっていることからわかるように,64bit アドレスで表現されるメモリ空間をリニアに扱うことができるようになります.また,ライブラリは 32bit 用,64bit 用が別々に提供されることになります.

id:my_redo_log

URL確認させていただきました。ご回答ありがとうございます。

(自身のOSとシステムコールに対する理解不足のため、わからないのかもしれませんが)libcだけではなく、システムコールとの対応関係があればありがたいのですが・・・。

2008/05/20 06:55:34

その他の回答(1件)

id:tera-p No.1

tera-p回答回数92ベストアンサー獲得回数212008/05/20 03:29:36ここでベストアンサー

ポイント70pt

http://www.valinux.co.jp/contents/tech/techlib/eos/linux64/linux... が良くまとまっていると思いますが,64bit バイナリは 64bit CPU の特長である 64bit レジスタや 64bit メモリアドレス空間を利用した(正確にはこれらを利用できるモードで動作する)プログラム,32bit バイナリはそれらを利用しないプログラムになります.

C でプログラミングするときの最も注意すべき違いは,long int と void* の幅が 64bit になるところです(LP64 データモデルの場合;ちなみに LP64 では int 幅は 32bit のままで変わりません).void* が 64bit になっていることからわかるように,64bit アドレスで表現されるメモリ空間をリニアに扱うことができるようになります.また,ライブラリは 32bit 用,64bit 用が別々に提供されることになります.

id:my_redo_log

URL確認させていただきました。ご回答ありがとうございます。

(自身のOSとシステムコールに対する理解不足のため、わからないのかもしれませんが)libcだけではなく、システムコールとの対応関係があればありがたいのですが・・・。

2008/05/20 06:55:34
id:redwing1 No.2

redwing1回答回数541ベストアンサー獲得回数32008/05/20 00:53:13

ライブラリがまったく違ったと思います。移行期には両方入れてましたよね。

id:my_redo_log

私の理解の程度も、「ライブラリの指定が違ったなぁ」程度です。

ですので、構造的にすっきり理解したいのです。

2008/05/20 06:57:14

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません