Oracle Solaris Studio 12.2: C ユーザーガイド

7.3.2 整数とロング整数のサイズの変更

ILP32 データ型モデルでは実際には整数とロング整数が区別されないため、ほとんどの場合、既存のコードでは区別なしに整数とロング整数が使用されています。整数とロング整数が区別なしに使用されているコードは、修正して ILP32 と LP64 両方のデータ型モデルの条件に準拠するようにしてください。ILP32 データ型モデルでは整数とロング整数はともに 32 ビットですが、LP64 データ型モデルではロング整数は 64 ビットです。

次の例を考えてみましょう。


int waiting;
long w_io;
long w_swap;
...
waiting = w_io + w_swap;

%
warning: assignment of 64-bit integer to 32-bit integer

LP64 データ型モデルでは、int や unsigned int 型配列に比べて、long や unsigned long 型などのの大きな配列が原因で、重大なパフォーマンスの低下を招くことがあります。long や unsigned long 型の大きな配列はまた、キャッシュミスの大幅な増加や使用メモリーの増加の原因になることもあります。

このため、アプリケーションの用途上 long 型と同程度に int 型で問題がないならば、long 型ではなく int 型を使用する方が安全です。

ポインタ型配列の代わりに int 型配列を使用すべきという意見もあります。一部 C 言語で開発されたアプリケーションは、LP64 データ型モデルに変換すると、深刻なパフォーマンスの低下を招きます。これは、そうした C 言語で開発されたアプリケーションが多数の大きなポインタ型配列に依存しているためです。