C ユーザーズガイド

データ型モデルの相違点

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 のデータ型と対応するサイズ (単位: ビット) は、次の表に示すとおりです。

C データ型 

ILP32 

LP64 

char 

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 の変換規則の働きも、データ型のサイズの変更の影響を受けます。意図したこと正しく示すには、定数の型を明示的に宣言してください。式で型変換を使用して、意図したとおりに式が評価されるようにすることもできます。このことは、意図したことを指示するうえで明示的な型変換が欠かせない符号拡張部で特に必要になります。