10.2 __align

__align キーワードは、 n バイト境界に変数を整列するようコンパイラに指示します。

__align は記憶域クラス修飾子です。これは、関数の型には影響しません。

構文

__align(n)
各項目には以下の意味があります。
n
境界整列を指定します。
ローカル変数の場合、 n には、1、2、4、または 8 を設定できます。
グローバル変数の場合、 n には、2 の累乗で 0x80000000 以下の任意の値を設定できます。

使用法

__align(n) は、宣言されている変数の通常の境界整列が n に指定された値より小さくなる場合に便利です。VFP 命令を使用する場合には 8 バイト境界整列によってパフォーマンスが大幅に向上します。
__align は、 extern および static と組み合わせて使用できます。

制約条件

__align は記憶域クラス修飾子なので、以下では使用できません。
  • typedef や構造体定義を含む型。
  • 関数パラメータ。
指定できるのはオーバーアライメントだけです。つまり、2 バイトオブジェクトを 4 バイト境界で整列させることはできますが、4 バイトオブジェクトを 2 バイト境界で整列させることはできません。

__align(8) char buffer[128];  // バッファの始点は 8 バイト境界
void foo(void)
{
    ...
    __align(16) int i; // this alignment value is not permitted for
                       // a local variable
    ...
}
__align(16) int i; // permitted as a global variable.
関連する参考文書
10.65 __attribute__((aligned)) 変数属性
8.131 --min_array_alignment=opt
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.