Utilizzo di variabili Locali + veloci delle Globali?

Cercando di ottimizzare una semplice funzione (ma richiamata molte volte) che ho creato in uno sketch ho notato una cosa per me strana, ma probabilmente con una sua logica.
In questa funziona c'e' un loop che per n volte disegna un pixel su un display tft, se la variabile "y" utilizzata dal ciclo FOR la dichiaro all' interno della funzione stessa tutto il ciclo viene svolto quasi nella meta' del tempo che ci impiega se la variabile la dichiaro come GLOBALE.
C'e' un motivo specifico??

void aggiornamanometropunti(word x){
    myGLCD.setColor(sfondomanometro);
    for (byte y=18;y<100;y++){                             //se la variabile y la dichiaro nelle GLOBALI rallenta il tempo di esecuzione!
    myGLCD.drawPixel(x,y);
    }

Si, il compilatore ottimizza il codice. Nel caso del for con variabile locale probabilmente viene impiegato uno dei registri interni della cpu, mentre come variabile globale, questa ottimizzazione non la può fare.

fuori dal for non cambia nulla, basta che la dichiaro all' interno della funzione e il processo e' piu' veloce rispetto a dichiararla come globale.

usare la direttiva register comporta svantaggi di qualche tipo?

se utilizzo :
register byte p;
nella funzione non cambia nulla.
se la dicharo nelle variabili globali il compilatore da errore : register name not specified for 'p'

srotolare????
spiegati meglio.

aaaa ok capito!
ma nel mio caso non posso usarla perché i valori 18 e 100 che per ora sono fissi alla fine diventeranno anche loro variabili che vengono passate alla funzione, quindi credo che non posso "srotolare".

x iscrizione