ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
Oracle Solaris Studio 12.3: C ユーザーガイド Oracle Solaris Studio 12.3 Information Library (日本語) |
32 ビットと 64 ビットコンパイル環境の最大の違いは、データ型モデルにあります。
32 ビットアプリケーション用の C のデータ型モデルは ILP32 モデルです。この名前は、integer、long、pointer が 32 ビットデータ型であることから名付けられています。long と pointer が 64 ビットの大きさになったことから名付けられた LP64 データ型モデルは、業界の関連企業から構成されるコンソーシアムが作成したものです。残りの C データ型 int、long long、short、および char はどちらのデータ型モデルでも同じです。
C の整数型間の標準の関係は、次に示すようにデータ型モデルに関係なく有効です。
sizeof (char) <= sizeof (short) <= sizeof (int) <= sizeof (long)
ILP32 と LP64 データ型モデルの基本的な C のデータ型と対応するサイズ (単位: ビット) は、次の表に示すとおりです。
表 7-1 ILP32 と LP64 のデータ型のサイズ
|
現在の 32 ビットアプリケーションでは通常、integer、pointer、および long は同じサイズとみなされます。ただし、LP64 データ型モデルでは long と pointer のサイズが変更されており、ILP32 から LP64 への変換で多くの問題の原因となる可能性があります。
また、宣言とキャストは非常に重要です。型が変化すると、式がどのように評価されるかが影響を受ける可能性があります。データ型のサイズが変わると、標準 C 変換規則の処理が影響を受けます。意図したことを正しく示すには、定数の型を明示的に宣言してください。式で型変換を使用して、意図したとおりに式が評価されるようにすることもできます。この方法は、意図したことを示す上で明示的な型変換が欠かせない符号拡張部で特に重要です。