restrict
dit que le pointeur est la seule chose qui accède à l'objet sous-jacent. Il élimine le risque de pointeur aliasing, ce qui permet une meilleure optimisation par le compilateur.
Par exemple, supposons que j'ai une machine avec les instructions spéciales qui peuvent multiplier les vecteurs de nombres dans la mémoire, et j'ai le code suivant:
void MultiplyArrays(int* dest, int* src1, int* src2, int n)
{
for(int i = 0; i < n; i++)
{
dest[i] = src1[i]*src2[i];
}
}
Le compilateur a besoin de gérer correctement si dest, src1, et src2 chevauchement en ce sens qu'elle doit faire une multiplication à un moment, du début à la fin. En ayant restrict
, le compilateur est libre pour optimiser ce code à l'aide du vecteur d'instructions.
EDIT: Wikipedia a une entrée sur restrict
, avec un autre exemple, ici.