Sujet : [C] Problème de macro |
bjone |
l'inline est pas génant.
le "register" peut être une contre-optimisation.
un bon compilo avec toutes les options d'optimisations saura relativement très bien allouer les registres aux varibles, et le fait de forcer une variable dans un registre pourrait s'avérer être une contre-optimisation, par exemple:
ça comme ça, c'est pas forcément mauvais:
Code :
- unsigned char *Buffer=surface->pixels;
- int i=hauteur;
- do {
- register int j=largeur;
- register unsigned char *Ptr=Buffer; // ligne courante
- // traitement pixel par pixel
- do {
- *Ptr=traitement(*Ptr);
- // d'autres register pour le traitement()
- Ptr++;
- } while(--j);
- Buffer+=largeur; // ligne suivante
- } while(--i);
|
et ça c'est plustôt pas bon si la boucle pixel par pixel n'a plus de registre:
Code :
- register unsigned char *Buffer=surface->pixels;
- register int i=hauteur;
- do {
- int j=largeur;
- unsigned char *Ptr=Buffer; // ligne courante
- // traitement pixel par pixel
- do {
- *Ptr=traitement(*Ptr);
- Ptr++;
- } while(--j);
- Buffer+=largeur; // ligne suivante
- } while(--i);
|
la règle d'or c'est de toujours favoriser la boucle la plus imbriqué pour gagner du temps, il faut favoriser le code qui a la plus haute fréquence d'éxécution... |