Psycologie des optimisations du compilateur g++

Bonjour à tous,

Un retour sur OSA après bien des mois d’absence pour une question qui a plus trait à la programmation, mais dont je pense qu’il y aura plus de réponses ici.

Soit une fonction inline en C++ :

  • Cette fonction implémente un ensemble de branches (if),
  • l’unique branche effectivement exécutée dépend de paramètre passés de manière constante et statique par le développeur à la compilation ;
  • Le code réellement exécuté tien en 2 lignes (shift/mask sur une variable)

Question : est ce que le compilateur supprime les branches mortes à la compilation étant donné qu’il a tous les éléments pour le faire?

(Ou autrement dit, j’ai besoin d’une macro mais si le compilo fait du bon boulot je préférerais autant utiliser des fonctions inline… )

Salut,

Je bosse avec quelques programmes dynamiques (le compilateur ne connait pas à l’avance la valeur des données) et je ne l’ai jamais vu ignorer un morceau de code.
Edité le 06/04/2012 à 14:37

Merci pour ta réponse…

Avec des données dynamiques ça semble logique dans la mesure où il ne sait pas à l’avance par où il passera.
s’il fait la même chose alors que les données sont statiques, ça ne m’arrange pas trop, ça risque d’embarquer beaucoup de code mort et pour un résultat qui peut être largement anticipé à la compilation…

Je vais aller demander du côté des dev. du compilo.

Les compilateurs ignorent le code mort, quand ils savent que s’en est !

Désolé, je travaille très (trop ?) souvent en dynamique et j’ai mal lu ton premier post.

:wink: Ok, merci ça me rassure :slight_smile: