多いと思います。
今後OSで、64bitCPU対応のものが主流になれば、自ずと32bitCPUは
廃れていくことになるでしょう。
Windowsのコンシューマ版でも、XPより64bit版が登場し、
WindowsVistaやWindows7でも32bit版、64bit版両方のバージョンが
発売されています。
今後、64bitCPUへの対応が避けては通れないものになるでしょう。
ここでは、64bitCPUに対応する上での注意点を挙げていきたいと思います。
そもそも32bitや64bitとは何を指しているのでしょうか?
これを説明するためには、CPUがどういった構造になっているのか
理解する必要があります。
CPUとは、Central Processing Unit(中央演算処理装置)の略で、
PCで発生する演算の一手を担います。

PCは、全てバイナリの命令群によって制御されています。
バイナリの命令は全てメモリに配置され、逐次的に実行しています。
バイナリにはそれぞれ番号に意味があり、インテルCPUでは
例えば加算を意味するADDは、0x04と定義され、
その後に加算する値が続きます。
上の図の例では、メモリの最初のアドレスで、0x04ときているので、
CPUは加算命令と判断します。
次の0x54をみて、実際に0x54を加算します。
このとき、CPUはレジスタという一時領域に計算結果を保存し
次の計算へとつなげます。
32bitCPUは、このレジスタのサイズが32bitで、
64bitCPUは、レジスタのサイズが64bitになります。
また、現在実行している命令の場所もレジスタに保存されます。
32bitCPUの時に、メモリが3GBちょいしか積めないという
問題の発端はここからきています。
これは、一度に(1命令で)計算できる幅が32bitに
限定されているということです。
仮に32bitのCPUで64bit同士の値の計算を行う場合、
まず、下位桁を計算し、次に上位桁を計算するといった
ことを行い、結果を出します。
64bitの方が高速と言われる理由は、この部分で、
64bit同士の計算が1命令で済んでしまうわけです。
ここまでは、アセンブラや機械語の話で、
C言語などの高級言語に置き換えると次のような影響をうけます。
32bitから64bitに移行した場合の、影響です。
@int型やlong型が32bitから64bitに拡張される(場合がある)
Aポインタが64bitに拡張される(場合がある)
B0xFFFFFFFFが[-1]にならない
Cアライメントが4バイトから8バイトに拡張される
DWin32APIなどの関数の一部で32bit対応のものと64bit対応のものを変更する
Eアセンブラのレジスタ、命令を書き換える
厳密にC言語の仕様を踏襲している人なら、
@などは問題にならないかと思いますが、
案外軽視しがちなのが、A〜Cあたりだと思います。
Aなどは、ポインタをintに代入するプログラムなどが
動かなくなる可能性があります。
ちなみにDは具体的には次の関数に影響がでます。
@SetWindowLong() → SetWindowLongPtr()
AGetWindowLong() → GetWindowLongPtr()
以上のことを考慮にいれてプログラムする必要があります。
ラベル:ふわ猫