Code Tips and Snippets


Pas encore membre ?
Cliquez ici pour vous inscrire.
Vous pourrez poster des commentaires.
Utilisation de register en C/C++ pour optimiser votre code !
Posté par pk le Samedi 07 Novembre 2015 à 15:48:25
Niveau 2 étoilesLangage C

Maj du lundi 06 avril 2020 : Article obsolete
Les derniers tests avaient été fait sur ubuntu 12.04...
L'optimisation de gcc se passe maintenant de register dans tous les cas...
Ce qui a été vrai pendant plus de 30 ans ne l'est plus aujourd'hui !


A l’origine, dans les années 70, lorsque le C a été inventé, le modificateur register a été introduit afin d’optimiser le code généré, en permettant au développeur, d'indiquer au compilateur que la variable en question allait beaucoup être utilisée dans le programme, et qu’il était souhaitable de la garder autant que possible dans un registre du processeur !

Aujourd’hui, l’évolution des techniques d’optimisation est telle que le compilateur est maintenant beaucoup plus efficace que le développeur dans la détermination des variables les plus utilisées dynamiquement et se charge de lui-même de les maintenir en registre, et le plus souvent ne tient plus vraiment compte du “conseil” du programmeur.

Aussi, beaucoup de gens recommandent, à tort, et nous allons voir pourquoi, de ne plus utiliser le modificateur register.

En effet, le modificateur register a un effet de bord associé : on ne peut pas référencer (prendre l’adresse) d’une variable de type register.

Les personnes conseillant de ne plus utiliser les register l’utilisent à tort comme un argument supplémentaire.

Or, le simple fait de savoir qu’on ne puisse pas prendre l’adresse d’une variable de type register, permet au compilateur, ( et à son optimiseur ), de savoir que la valeur de cette variable ne peut pas être modifiée de façon indirecte par l’intermédiaire d’un pointeur.

Lorsque à un moment de l’exécution du flot d'instructions, cette variable a sa valeur affectée dans un registre processeur, et que le registre n’a pas été depuis utilisé pour récupérer la valeur d’une autre variable, le compilateur sait qu’il n’a pas besoin de re-charger la valeur de la variable dans le registre en question.
Celà permet ainsi d’éviter de couteux accès mémoire inutiles.

Faites vos tests vous-même et vous mesurerez des gains de performance significatifs dans vos boucles les plus internes.

 

yakpro rulez!

Ce Site a été mis à jour le Mercredi 19 Janvier 2022 à 09:43:57