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

印刷ビューの終了

更新: 2014 年 12 月
 
 

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

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

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

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

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

さらに、long または unsigned long の大きな配列は、int または unsigned int の配列と比較して、LP64 データ型モデルでパフォーマンスを顕著に低下させる可能性があります。long または unsigned long の大きな配列は、キャッシュミスの大幅な増加や消費メモリーの増加の原因になることもあります。

このため、アプリケーション目的のために int が long と同程度に機能する場合は、long ではなく int を使用してください。

この引数は、ポインタの配列の代わりに int の配列を使用する場合にも適用されます。一部の C アプリケーションは、LP64 データ型モデルへの変換後に、深刻なパフォーマンスの低下を招きます。これは、それらが多数の大きなポインタ型配列に依存しているためです。