7 votes

C++20 : différence entre [[probable]], [[improbable]] et __builtin_expect ?

Informations préliminaires : selon le récent Rapport de voyage du comité C++ de l'ISO El [[ likely ]] y [[ unlikely ]] Les attributs pour le branchement conditionnel seront ajoutés dans la section C++20 et est disponible dans la dernière version de GNU GCC (vous pouvez jouer avec sur le compilateur en ligne wandbox.org ).


Question : Est-ce que la construction suivante

if (cond) [[ likely ]] { ... }

équivalent à celui qui suit ?

if (__builtin_expect(bool(cond), 1)) { ... }

Existe-t-il des différences de performances ou des nuances de mise en œuvre entre les différents compilateurs dont il faut être conscient pour les utiliser efficacement ?

9voto

Vittorio Romeo Points 2559

La construction suivante est-elle équivalente à la suivante ?

En intention, oui.


Existe-t-il des différences de performances ou des nuances d'implémentation entre les compilateurs dont il faut être conscient afin de l'utiliser efficacement ?

Comme vous pouvez le voir dans P0479 Il n'y a aucune exigence de formulation obligatoire sur le comportement de ces attributs. Leur comportement est mentionné dans le cadre d'une note non normative, que les implémentations doivent respecter. encouragé mais pas forcé à suivre.

La seule façon de répondre à cette question est de consulter le manuel de votre compilateur.

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