C99 の制限付きポインタ

C99 の restrict は、さまざまなオブジェクトのポインタ型や関数パラメータ配列が重複するメモリ領域を指さないことをコンパイラに指示するキーワードです。したがってコンパイラは、エイリアスが生成されるために行われなかった最適化を実行できます。

以下の例では、ポインタ a は、ポインタ b と同じメモリ領域を指しません(また、指すことがあってはなりません)。

void copy_array(int n, int *restrict a, int *restrict b)
{
    while (n-- > 0)
        *a++ = *b++;
}
void test(void)
{
    extern int array[100];
    copy_array(50, array + 50, array);    // 有効
    copy_array(50, array + 1, array);     // 定義されていない動作
}

ただし、restrict で修飾されたポインタは、異なる配列や、配列内の異なる領域を指すことができます。

コードでは、restrict で修飾されたポインタが重複するメモリ領域を指さないようにする必要があります。

C90 および C++ で許可される __restrict は、restrict と同じ意味です。

--restrict を使用すると、restrict を C90 および C++ で使用できます。

Show/hide関連項目

Copyright © 2010 ARM. All rights reserved.ARM DUI 0472BJ
Non-ConfidentialID011811