1. ホーム
  2. c

[解決済み】C99 'restrict' キーワードの現実的な使用法?

2022-04-10 15:28:58

質問

ドキュメントやQ&Aを見ていたら、このことが書かれていました。簡単な説明を読んだのですが、基本的にポインタが他の場所を指すために使われないというプログラマからの約束になるとのことでした。

どなたか、これを実際に使用する価値のある現実的なケースを提示していただけませんか?

どのように解決するのですか?

restrict は、ポインタが唯一の基礎となるオブジェクトにアクセスするものであると言います。 これにより、ポインタのエイリアシングの可能性を排除し、コンパイラによる最適化をより良くすることができます。

例えば、メモリ上の数字のベクトルを乗算する特殊な命令を持つマシンがあり、次のようなコードがあったとします。

void MultiplyArrays(int* dest, int* src1, int* src2, int n)
{
    for(int i = 0; i < n; i++)
    {
        dest[i] = src1[i]*src2[i];
    }
}

コンパイラは dest , src1 および src2 が重なっているため、最初から最後まで一度に1つの掛け算をしなければならない。 このため restrict このため、コンパイラはベクトル命令を使って、このコードを自由に最適化することができます。

ウィキペディアには restrict を、別の例で説明します。 こちら .