64ビットになると何が変わる?――64ビットプログラミングのデータモデル64ビットコンピューティング最前線(1/2 ページ)

システムが64ビットになるとプログラム的には何が変わるのか。3つの基本的な64ビットプログラミングデータモデルを取り上げながら、理解を深めていこう。

» 2005年06月13日 00時00分 公開
[C MAGAZINE]

C MAGAZINE 2004年10月号第3特集「64ビットコンピューティング」より転載

64ビットプログラミングで何が変わる?

 システムが64ビットになるとプログラム的には何が変わるのでしょうか。

 まず、大きな変更点として、ポインタの幅(サイズ)が64ビットになります。このことで、より幅広いアドレスをカバーできるようになります。そもそも、ポインタのサイズが32ビットのままなら64ビットに拡張される意味がありませんし、これは当然といえば当然のことかもしれません。

 通常、ポインタはポインタとしてしか使用されることはありませんし、intとポインタとで代入を行うといったトリッキーなことをしていないかぎり、そのまま64ビット環境向けにリコンパイルすれば、ソースコードレベルでそれほど大きな問題になることはないでしょう。

 実数(浮動小数の取り扱い)についても、一般的な使い方をしているかぎりは、とくに問題にはならないはずです。32ビットのfloatについても64ビットのdoubleについても、通常はIEEE754フォーマットによってプロセッサやOSアーキテクチャとは別に規定されています。

 64ビットシステムになって、もっとも問題になってくるのが整数の扱いです。C言語を多少なりともかじったことのあるプログラマが64ビットシステムになったとき最初に思いつくことは、「int=64ビットになってしまうのか?」といった疑問でしょう。まさにそれです。

 とてもあいまいな表現になってしまいますが、その答えは「かぎりなくノーに近いノー」です。「かぎりなくノーに近い」というのは「イエス」の可能性もあるという意味です。ただ、現在一般的に使用されている知名度の高いコンパイラでは、とくに指定をしないかぎり、デフォルトで「int=32ビット」扱いのままになると考えられます。

 このあたりの仕様は、次に紹介する「LP64」「LLP64」「ILP64」という3つの基本的な64ビットプログラミングデータモデルによって決定されることになります。

Tips 3 ILP32とLP32
  32ビットWindowsをはじめとする一般的な32ビットシステムでは、ILP32の32ビットプログラミングデータモデルが用いられています。
  これは、ポインタもint型もlong型もすべて32ビット長であるということを表します。また、Windows 3.1などの16ビットシステムでは、LP32データモデルが採用されていました。こちらは、ポインタとlong型が32ビットでint型のみが16ビットとなっています。

       1|2 次のページへ

Copyright(C) 2010 SOFTBANK Creative Inc. All Right Reserved.

注目のテーマ