__alignof__ 演算子は、オペランドの位置合わせに使用されたバイト数を戻します。言語フィーチャーは、 C89 および C99 に対して直交です。オペランドは式、または型の括弧付きの ID とすることができます。 オペランドが左辺値を表す式である場合、__alignof__ によって戻される数は、左辺値が持つと認知されている位置合わせを表します。式の型は コン パイル時に決定されますが、式自体の評価は行われません。オペランドが型である場合、 通常、ターゲット・プラットフォーム上の型に必要な位置合わせを表します。
__alignof__ 演算子を次の項目に適用することはできません。
__alignof__ 式の形式は、次のとおりです。
>>-__alignof__--+-unary_expression-+--------------------------->< '-(--type-id--)----'
type-id が参照であるか、または参照されるタイプである場合、結果は 参照されるタイプの位置合わせです。type-id が配列である場合、結果は 配列エレメント型の位置合わせです。type-id が基本型である場合、結果は インプリメンテーションでの定義によります。
例えば Linux の場合、__alignof__(long) は 、32 ビット・モードでは 4 を戻し 、64 ビット・モードでは 8 を戻します。
AltiVec 言語拡張機能が使用可能になっていれば、__alignof__ のオペランドはベクトル型とすることができます。 例えば、次のような場合です。
vector unsigned int v1 = (vector unsigned int)(10); vector unsigned int *pv1 = &v1; __alignof__(v1); // vector type alignment: 16. __alignof__(&v1); // address of vector alignment: 4. __alignof__(*pv1); // dereferenced pointer to vector alignment: 16. __alignof__(pv1); // pointer to vector alignment: 4. __alignof__(vector signed char); // vector type alignment: 16.
__attribute__((aligned)) を使用して、ベクトル型の変数の位置合わせを増加させる場合、__alignof__ 演算子によって戻される値は、__attribute__((aligned)) によって指定される位置指定係数です。
関連参照