Question :
Pourquoi les compilateurs s'abstiennent-ils de fusionner des écritures consécutives de la même valeur en un seul atome variable ?
Réponse :
Bien que les normes C 11 / C 14 permettent de regrouper plusieurs magasins en un seul, les compilateurs n'implémentent pas cette optimisation en raison de :
1. Problèmes de barre de progression :
L'enfoncement et le pliage des magasins de boucles peuvent entraîner l'apparition d'une barre de progression bloquée à zéro jusqu'à ce qu'elle passe à 100 % à la fin, au lieu d'afficher la progression de manière incrémentielle.
2. Principe de la moindre surprise :
Les programmeurs s'attendent à ce que chaque instruction de magasin atomique ait une opération de mémoire distincte, plutôt que d'être optimisée. Cela évite les comportements inattendus.
3. Cas d'utilisation limités :
Les compilateurs ont déterminé que les scénarios dans lesquels cette optimisation serait bénéfique, tels que la réduction des opérations inutiles du nombre de références shared_ptr, sont rares.
1. Règle as-if :
La règle as-if permet aux compilateurs de déterminer l'ordre des opérations de mémoire, même si le code source indique le contraire. Cela permet des optimisations internes qui peuvent modifier le comportement du programme.
1. Extensions de l'API :
Des discussions au sein des groupes de travail C sont en cours pour étendre l'API std::atomic afin de fournir un contrôle sur les comportements d'optimisation, permettant aux compilateurs d'optimiser le cas échéant.
2. Variables atomiques volatiles :
Utilisation de variables atomiques volatiles
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!