79 votes

La const-correction peut-elle améliorer les performances?

J'ai lu à maintes reprises qu'appliquer const-correctness dans votre code C ou C ++ n'était pas une bonne pratique en ce qui concerne la maintenabilité, mais cela pourrait également permettre à votre compilateur d'effectuer des optimisations. Cependant, j'ai aussi lu le contraire, à savoir que cela n'affecte en rien les performances.

Par conséquent, avez-vous des exemples dans lesquels l'exactitude de const peut aider votre compilateur à améliorer les performances de votre programme?

67voto

Billy ONeal Points 50631

const exactitude ne peut améliorer les performances, car const_cast et mutable sont dans la langue, et de permettre au code de conformingly briser les règles. C'est encore pire en C++11, où votre const données peuvent par exemple être un pointeur vers un std::atomic, ce qui signifie le compilateur a à l'égard des modifications apportées par d'autres threads.

Cela dit, il est trivial pour le compilateur à regarder le code qu'il génère et de déterminer si elle a effectivement écrit pour une variable donnée, et d'appliquer des optimisations en conséquence.

Que tout est dit, const correct est une bonne chose à l'égard de la facilité de maintenance. Sinon, les clients de votre classe pourrait casser cette catégorie de membres internes. Par exemple, considérons la norme std::string::c_str() -- si elle ne pouvait pas retourner const valeur, vous seriez capable de la vis autour de la mémoire tampon interne de la chaîne!

Ne pas utiliser const pour des raisons de performances. L'utiliser pour des raisons de maintenabilité.

6voto

Anycorn Points 20521

dans mon expérience, pas de

Pour les variables scalaires, le compilateur est capable de déterminer à chaque fois que la valeur est modifiée et effectuer la nécessaire optimisation de lui-même.

Pour le tableau de pointeurs, const exactitude n'est pas une garantie que les valeurs sont vraiment constante en présence de potentiels problèmes d'aliasing. Donc compilateur ne peut pas utiliser le modificateur const seul à procéder à des optimisations

si vous êtes à la recherche d'optimisation, vous devriez envisager __restrict__ ou fonction spéciale modificateurs/attributs: http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html

5voto

Maxim Yegorushkin Points 29380

Un peu vieux, mais toujours applicable: http://www.gotw.ca/gotw/081.htm Et quelques autres: http://cpp-next.com/archive/2009/08/want-speed-pass-by -valeur/

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