疑問に思っていること: ポインターに制限を追加すると、ポインターが別のポインターのエイリアスではないことをコンパイラーに伝えます。次のような関数があるとします。
// 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
に動作するかについての良い情報を見つけることができませんでした.