OVH Cloud OVH Cloud

Optimisation avec const

1 réponse
Avatar
David Tschumperlé
Bonjour,
j'aimerais savoir si les compilo C++ en général se débrouillent bien
pour optimiser les choses du type :

inline void func(const float toto=1) {
for (uint i=0; i<10000; i++)
if (toto>=1) fait_un_truc();
else fait_un_autre_truc();
}

Je ne connais pas suffisamment l'asm pour aller voir le code généré.
Est-ce que je peux esperer qu'en appelant func(), le code généré soit
plus optimisé (pas de if, car parametre par défaut connu) qu'en appelant
par exemple func(a) où a est une variable float non connue à la compil.

Merci d'avance

David.

1 réponse

Avatar
David Tschumperlé
David Tschumperlé wrote:

Bonjour,
j'aimerais savoir si les compilo C++ en général se débrouillent bien
pour optimiser les choses du type :

inline void func(const float toto=1) {
for (uint i=0; i<10000; i++)
if (toto>=1) fait_un_truc();
else fait_un_autre_truc();
}

Je ne connais pas suffisamment l'asm pour aller voir le code généré.
Est-ce que je peux esperer qu'en appelant func(), le code généré soit
plus optimisé (pas de if, car parametre par défaut connu) qu'en appelant
par exemple func(a) où a est une variable float non connue à la compil.

Merci d'avance

David.


Je me répond à moi même.
J'ai finalement regardé les sources asm généré pour cette exemple, et
c'est pas si dur à comprendre.
Pour info :

Test avec Borland C compiler (bcc32) : il garde le if, même avec
l'option d'ptimisation.
Test avec g++ 3.3.1 : il vire le if si on active l'optimisation -O2,
sinon il le garde (sans optim).

Donc il semble que ca optimise quand même avec un compilo récent.

David.