Bonjour,
considérons le fragment de code suivant :
int add(int, int);
int dbl(int);
int add_or_dbl(int a, int b, bool c)
{
int q[2];
q[0] = add(a, b);
q[1] = dbl(a);
return q[c];
}
Ais-je la garantie qu'à chaque appel de add_or_dbl(), chacune des deux
fonctions add() et dbl() sera appelée, et que le compilo ne va pas
optimiser le corps de add_or_dbl() en quelque chose comme
return c ? dbl(a) : add(a, b);
où il n'y aurait donc qu'une seule des deux fonctions appellée ?
Est-ce que ça change quelque chose si les deux fonctions add() et dbl()
sont static ? Dans ce cas, le compilo peut il me semble les inliner,
mais une fois inlinées, peut-il supprimer leur corps, ou plus précisément
rendre son exécution conditionnelle ?
Dans le contexte qui m'intéresse, les fonctions add() et dbl() sont
coûteuses en temps d'exécution, mais ont des coûts différents, et ce que
je veux, c'est que add_or_dbl() ait un temps d'exécution indépendant de
la valeur de c (ou plus précisément, que la séquence d'opérations
coûteuses soit la même indépendament de la valeur de c). J'ai vu ce
genre de code conseillé pour répondre à ce besoin, et je ne suis pas sûr
de comprendre ce qui garanti que ça marche, et encore moins quelles sont
les limites.
Merci d'avance pour vos lumières !
--
Manuel Pégourié-Gonnard -
http://people.math.jussieu.fr/~mpg/