システムが64ビットになるとプログラム的には何が変わるのか。3つの基本的な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ビットプログラミングデータモデルによって決定されることになります。
32ビットWindowsをはじめとする一般的な32ビットシステムでは、ILP32の32ビットプログラミングデータモデルが用いられています。これは、ポインタもint型もlong型もすべて32ビット長であるということを表します。また、Windows 3.1などの16ビットシステムでは、LP32データモデルが採用されていました。こちらは、ポインタとlong型が32ビットでint型のみが16ビットとなっています。
Copyright(C) 2010 SOFTBANK Creative Inc. All Right Reserved.