疑問に思っていること: ポインターに制限を追加すると、ポインターが別のポインターのエイリアスではないことをコンパイラーに伝えます。次のような関数があるとします。
// Constructed example
void foo (float* result, const float* a, const float* b, const size_t size)
{
for (size_t i = 0; i < size; ++i)
{
result [i] = a [0] * b [i];
}
}
resultコンパイラが とオーバーラップする可能性があると想定する必要がある場合aは、毎回 を再フェッチする必要があります。ただし、aとマークされconstているように、コンパイラは a が固定されていると想定することもできるため、一度取得すれば問題ありません。
質問は、このような状況で、restrict を使用するための推奨される方法は何ですか? コンパイラがa毎回再フェッチすることは確かに望ましくありませんが、ここでどのようrestrictに動作するかについての良い情報を見つけることができませんでした.