Come da titolo, mi sono un attimo smarrito negli attributi delle variabili ( e variabili locali) e dei nomi di funzione, insomma sugli identificatori. Esposizione: il fatto è che esistono 4 classi di memoria, che individuano quanto un identificatore esista in memoria, o non sia caricato direttamente nella nella stessa. Dunque il dubbio nasce dalle fasi della programmazione ovvero:
L'Editing, quando si scrive il codice nel programma.
Compilazione = quando il programmatore inserisce il comando di compilazione(che varia da o.s.)e prima che sia iniziata la traduzione, verrà letto il preprocessore, col relativo file di intestazione al fine di tappare i buchi dei nomi di funzione, con l'ausilio del linker, ottenuto poi il codice oggetto, avrò l'eseguibile a.out..ora la fase importante...il caricamento = cioè, con i comandi appositi caricare all'interno della ram l'intero programma tradotto..ed è qui il dubbio...questo è vero quando di default le variabili sono, secondo la classe di memoria, con parola chiave "auto", ma comporta uno svantaggio, cioè quello che prima il tutto è caricato in ram, poi ogni singola variabile nel registro cpu per elaborare il dato, e poi rispedito nella ram, nell'apposito cassettino.
Ora, però...viene spiegata la parola chiave "register", dove mi dice che, "suggerisce" al compilatore di registrare in uno dei cassetti della CPU la variabile, e la domanda è...ma in quale fase della programmazione???cioè, durante la compilazione con l'ausilio del linker? o sempre quando ho ottenuto il codice oggetto? insomma, io scrivo:
#include <stdio.h>
main() {
register int x;
x = 1;
while(x <= 10){
printf("%d\n", x);
x++;
}
return 0;
come funziona dal punto di vista di classe di memoria? in pratica quando il compilatore traduce il codice scrive direttamente nei registri di cpu l'x...? oppure quando nella fase di caricamento, appena avvio l'eseguibile la x, anzichè essere caricata nella ram, va nei registri cpu?