Application de l'ordre des déclarations en C
Question :
Comment peut-on empêcher la réorganisation de instructions en code C, même avec des optimisations activé ?
Réponse :
Malgré l'hypothèse courante, C n'applique pas intrinsèquement l'ordre des instructions, en particulier dans le cadre des optimisations. Certaines instructions peuvent apparaître dans le désordre dans le code optimisé, ce qui peut poser problème dans des scénarios tels que les opérations urgentes.
Solutions :
Fondamentalement, la manipulation des opérations la sémantique des opérations fondamentales comme l'addition pour obtenir un ordre strict n'est pas réalisable. Les optimisations du compilateur et de la conception matérielle reposent sur l'hypothèse que ces opérations n'ont pas de propriétés de synchronisation observables.
Cependant, des techniques efficaces ont émergé pour le micro-benchmarking :
Manipulation de données opaques :
Support de la bibliothèque :
template <class T> __attribute__((always_inline)) inline void DoNotOptimize(const T &value) { asm volatile("" : "+m"(const_cast<T &&>(value))); }
Directives du compilateur :
Remarque :
Le comité des normes C étudie la standardisation des API telles que DoNotOptimize pour faciliter davantage l'application de l'ordre des instructions.
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!