位置合わせモードの使用

XL C がサポートする各々のデータ型は、プラットフォーム固有のデフォルト位置合わせモードに従って、 バイト境界に沿って位置合わせされます。AIX® では、デフォルトの位置合わせモードは power または full です。これらは同等のものです。

ユーザーは下記のいずれかの仕組みを使用して、デフォルトの位置合わせモードを変更することができます。

有効な位置合わせモードの各々は 表 1 に定義済みで、 すべてのデータ型のスカラー変数について位置合わせ値としてバイト数を提供します。 32 ビット・モードと 64 ビット・モードに違いがある場合は、それらも示されます。また、集合体の最初 (スカラー) のメンバーと後続のメンバーの間に違いがあるときは、それらも示されます。

表 1. 位置合わせの設定 (値はバイト数で示される)
データ型 ストレージ 位置合わせの設定
natural power、full mac68k、 twobyte3 bit_packed2 packed2
_Bool (32 ビット・モード) 1 1 1 1 1 1
_Bool (64 ビット・モード) 1 1 1 サポートされない 1 1
char、signed char、unsigned char 1 1 1 1 1 1
wchar_t (32 ビット・モード) 2 2 2 2 1 1
wchar_t (64 ビット・モード) 4 4 4 サポートされない 1 1
int、unsigned int 4 4 4 2 1 1
short int、unsigned short int 2 2 2 2 1 1
long int, unsigned long int (32 ビット・モード) 4 4 4 2 1 1
long int, unsigned long int (64 ビット・モード) 8 8 8 サポートされない 1 1
_Decimal32 4 4 4 2 1 1
_Decimal64 8 8 8 2 1 1
_Decimal128 16 16 16 2 1 1
long long 8 8 8 2 1 1
float 4 4 4 2 1 1
double 8 8 注を参照 1 2 1 1
long double 8 8 注を参照 1 2 1 1
long double with -qldbl128 16 16 注を参照 1 2 1 1
pointer (32 ビット・モード) 4 4 4 2 1 1
pointer (64 ビット・モード) 8 8 8 サポートされない 1 1
vector types 16 16 16 16 1 1
注:
  1. 集合体内ではこのデータ型の最初のメンバーがその natural 位置合わせ値に従って位置合わせされます。集合体の後続のメンバーは 4 バイト境界に位置合わせされます。
  2. packed 位置合わせでは、ビット・フィールド・メンバーはビット・レベルでパックされません。 ビット・フィールドをビット・レベルでパックする必要がある場合は、bit_packed 位置合わせを使用してください。
  3. mac68k 位置合わせの場合、集合体にベクトル・メンバーが含まれなければ、位置合わせは 2 バイトになります。集合体にベクトル・メンバーが含まれる場合は、位置合わせはすべてのメンバーの中で最大規模になります。
doublelong long、または long double データ型を含む 集合体について作業をしている場合は、集合体の各メンバーはその natural 位置合わせ値に従って位置合わせされているので、 最高のパフォーマンスのためには natural モードを使用してください。 あるプラットフォーム上のアプリケーションでデータを生成し、 そのデータを別のプラットフォーム上のアプリケーションで読み取る場合は、結果として すべてのプラットフォーム上で等価データ位置合わせとなる、bit_packed モードの 使用を推奨します。
注:
  • ビット・パック構造体内のベクトルは、その確実な位置合わせのために追加の処置をしない限り 正しく位置合わせされない可能性があります。
  • ヒープ割り当てストレージまたはポインター演算を経由してベクトルにアクセスすると、ベクトルの位置合わせで問題が発生する可能性があります。 例えば、double __align(16) my_array[1000] は 16 バイトで位置合わせされますが、my_array[1] はされません。my_array[i] の位置合わせ方法は、i の値によって決まります。

集合体の位置合わせでは、集合体全体の位置合わせの規則を説明して、集合体レイアウトの実例を提供しています。 ビット・フィールドの位置合わせでは、その他の規則と、 ビット・フィールドの使用と位置合わせに関する考慮事項について説明し、 ビット・パック位置合わせの例を示します。