Oracle® Solaris Studio 12.4: C ユーザーガイド

印刷ビューの終了

更新: 2014 年 12 月
 
 

7.1 データ型モデルの相違点

32 ビットと 64 ビットコンパイル環境の最大の違いは、データ型モデルにあります。

32 ビットアプリケーション用の C のデータ型モデルは ILP32 モデルです。この名前は、integer、long、pointer が 32 ビットデータ型であることから名付けられています。long と pointer が 64 ビットの大きさになったことから名付けられた LP64 データ型モデルは、業界の関連企業から構成されるコンソーシアムが作成したものです。残りの C データ型 intlong longshort、および char はどちらのデータ型モデルでも同じです。

C の整数型間の標準の関係は、次に示すようにデータ型モデルに関係なく有効です。

sizeof (char) <= sizeof (short) <= sizeof (int) <= sizeof (long)

ILP32 と LP64 データ型モデルの基本的な C のデータ型と対応するサイズ (単位: ビット) は、次の表に示すとおりです。

表 7-1  ILP32 と LP64 のデータ型のサイズ
C データ型
ILP32
LP64
char
8
8
short
16
16
int
32
32
long
32
64
long long
64
64
pointer
32
64
enum
32
32
float
32
32
double
64
64
long double
128
128

現在の 32 ビットアプリケーションでは通常、integer、pointer、および long は同じサイズとみなされます。ただし、LP64 データ型モデルでは long と pointer のサイズが変更されており、ILP32 から LP64 への変換で多くの問題の原因となる可能性があります。

また、宣言とキャストは非常に重要です。型が変化すると、式がどのように評価されるかが影響を受ける可能性があります。データ型のサイズが変わると、標準 C 変換規則の処理が影響を受けます。意図したことを正しく示すには、定数の型を明示的に宣言してください。式で型変換を使用して、意図したとおりに式が評価されるようにすることもできます。この方法は、意図したことを示す上で明示的な型変換が欠かせない符号拡張部で特に重要です。