XL C/C++ を使用すると、32 ビット・アプリケーションと 64 ビット・アプリケーションの両方を開発することができます。それには、コンパイル時に、それぞれ、-q32 (デフォルト) または -q64 と指定してください。
ただし、既存のアプリケーションを 32 ビット・モードから 64 ビット・モードに移植すると、さまざまな問題が生じる可能性があります。そのほとんどは、C/C++ long データ型および pointer データ型のサイズと位置合わせが、この 2 つのモード間で異なることに起因します。次の表は、その違いをまとめたものです。
表 1. 32 ビット・モードおよび 64 ビット・モードにおけるデータ型のサイズと位置合わせ
データ型 | 32 ビット・モード | 64 ビット・モード | ||
---|---|---|---|---|
サイズ | 位置合わせ | サイズ | 位置合わせ | |
long、unsigned long | 4 バイト | 4 バイト境界 | 8 バイト | 8 バイト境界 |
pointer | 4 バイト | 4 バイト境界 | 8 バイト | 8 バイト境界 |
size_t (システム定義の unsigned long) | 4 バイト | 4 バイト境界 | 8 バイト | 8 バイト境界 |
ptrdiff_t (システム定義の long) | 4 バイト | 4 バイト境界 | 8 バイト | 8 バイト境界 |
以下の各節では、上記のような違いが原因で陥りやすい落とし穴について説明するとともに、そのような問題の回避に役立つ、推奨されるプログラミングの実例をご紹介します。
32 ビット・モードまたは 64 ビット・モードでコンパイルする場合は、アプリケーションの移植に関連する一部の問題を診断するのに役立つ、-qwarn64 オプションを使用することができます。いずれのモードでも、不具合 (切り捨てやデータ損失など) が発生した場合は、コンパイラーが即時に警告を発します。
64 ビット・モードでパフォーマンスを向上させるための提案については、64 ビット・モードでの演算の最適化を参照してください。