Nous avons tous entendu la ligne "ne pas utiliser register
", en expliquant que essayer de surpasser un compilateur est une erreur.
register
, d'après ce que je sais, ne concerne pas spécifiquement les registres du CPU, mais plutôt le fait qu'une variable donnée ne peut pas être référencée de manière indirecte. Je suppose que c'est souvent considéré comme obsolète car les compilateurs peuvent détecter automatiquement un manque d'adressage, rendant ces optimisations transparentes.
Mais si nous sommes fermes sur cet argument, ne peut-on pas appliquer la même logique à chaque mot-clé axé sur l'optimisation en C? Pourquoi utilisons-nous par exemple inline
et restrict
de C99?
Je suppose que certaines choses comme l'aliasing rendent la déduction de certaines optimisations difficiles ou même impossibles, alors où doit-on tracer la ligne avant de commencer à entrer dans le territoire du Compilateur Suffisamment Intelligent?
Où devrait-on tracer la ligne en C et C++ entre fournir des informations d'optimisation au compilateur et supposer qu'il sait ce qu'il fait?
ÉDIT: Jens Gustedt a souligné que ma confusion entre C et C++ n'est pas correcte puisque deux des mots-clés ont des différences sémantiques et l'un d'eux n'existe pas en C++ standard. J'avais un bon lien sur register
en C++ que j'ajouterai si je le trouve...