232 votes

Utilisation réaliste du C99 ' limiter ' mot-clé ?

Je passais par le biais de certains documents et questions/réponses et vu mentionné. J’ai lu une brève description, indiquant qu’il serait fondamentalement une promesse du programmateur qui ne sera pas le pointeur utilisé pour pointer un autre endroit.

Quelqu'un peut-il offrir certains cas réalistes où son intéressant d’utiliser réellement cela ?

226voto

Michael Points 34110

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X