En fait, ça dépend.
Si tu fais un switch-case avec 0, 1, 2, 3… il va faire un tableau des adresses où sont les instructions suivante. Si tu as des valeurs trop différentes ou des grandes valeurs, il génère (le compilo) une dichotomie. Pour optimiser vraiment, il faut connaître la répartition des valeurs quand on rentre dans le switch.
Ainsi, si 8 est la valeur dans 90% des cas, il vaut mieux :
if(var==8){/* Code */}else{switch(var){case2:
}}
Sauf que là, l’auteur cherche à réduire la taille du code, enfin surtout de la RAM utilisé. Ce qui veut dire réduire la pile ce qui implique d’éviter trop de profondeur d’appel et de variables locales. L’optimisation en vitesse est généralement incompatible avec l’optimisation en taille.
[^] # Re: Moi aussi!
Posté par Anthony Jaguenaud . En réponse au journal Et Dieu inventa le soutien gorge !. Évalué à 2.
En fait, ça dépend.
Si tu fais un switch-case avec 0, 1, 2, 3… il va faire un tableau des adresses où sont les instructions suivante. Si tu as des valeurs trop différentes ou des grandes valeurs, il génère (le compilo) une dichotomie. Pour optimiser vraiment, il faut connaître la répartition des valeurs quand on rentre dans le switch.
Ainsi, si 8 est la valeur dans 90% des cas, il vaut mieux :
Sauf que là, l’auteur cherche à réduire la taille du code, enfin surtout de la RAM utilisé. Ce qui veut dire réduire la pile ce qui implique d’éviter trop de profondeur d’appel et de variables locales. L’optimisation en vitesse est généralement incompatible avec l’optimisation en taille.