Diamo un'occhiata a ciò che dice lo standard ISO C (farò riferimento all'edizione 2011, una bozza disponibile come N1570 .
6.7.1p6:
A declaration of an identifier for an object with storage-class
specifier register suggests that access to the object be as fast as
possible. The extent to which such suggestions are effective is
implementation-defined.
Si noti che non dice nulla sull'archiviazione dell'oggetto in un registro della CPU.
Altrove, lo standard dice che una dichiarazione esterna non può usare la parola chiave register
; può essere utilizzato solo per le variabili dichiarate all'interno del corpo di una funzione.
Il tentativo di prendere l'indirizzo di un oggetto con qualifica register
non è consentito. (Ciò significa che dichiarare un array con register
, sebbene sia legale, non è particolarmente utile, devi prendere il suo indirizzo per poter fare l'indicizzazione).
A parte questo, un compilatore è libero di ignorare la parola chiave register
, trattandola come equivalente a auto
. Puoi applicare la parola chiave register
a qualsiasi variabile che ti piace (purché sia definita localmente), indipendentemente dal suo tipo o dimensione - ma l'unica cosa che il compilatore è obbligato a fare è lamentarsi se provi a prendere il suo indirizzo .
Un compilatore è anche libero di memorizzare qualsiasi cosa voglia nei registri della CPU, sia che si usi la parola chiave register
o meno, a condizione che il comportamento sia lo stesso di se la variabile fosse stata memorizzata. Ciò include la memorizzazione di una variabile in un registro per tutta la sua durata (se il codice non tenta di calcolare il suo indirizzo), o recuperando il suo valore da un registro in cui il compilatore sa che capita di essere memorizzato invece di ricaricarlo dalla memoria.
La saggezza comune in questi giorni è che i compilatori sono migliori degli umani nel decidere quali variabili devono essere inserite nei registri per una maggiore velocità, quindi la parola chiave register
ha un'utilità limitata. Nei vecchi tempi, quando i sistemi erano così piccoli e lenti che i compilatori non potevano permettersi di fare quel tipo di analisi e i dinosauri vagavano per la Terra, register
poteva essere molto utile. Con i compilatori moderni, non così tanto.