Mientras que el calificador const
indica al compilador
«Esto nunca cambia» (lo que permite al compilador
realizar optimizaciones extra), el calificador volatile
dice al compilador «Nunca se sabe cuando cambiará
esto», y evita que el compilador realice optimizaciones
basadas en la estabilidad de esa variable. Se utiliza esta
palabra reservada cuando se lee algún valor fuera del control
del código, algo así como un registro en un hardware de
comunicación. Una variable volatile
se lee siempre que
su valor es requerido, incluso si se ha leído en la línea
anterior.
Un caso especial de espacio que está «fuera del control
del código» es en un programa multi-hilo. Si está
comprobando una bandera particular que puede ser modificada por
otro hilo o proceso, esta bandera debería ser volatile
de modo que el compilador no asuma que puede optimizar múltiples
lecturas de la bandera.
Fíjese en que volatile
puede no tener efecto cuando el
compilador no está optimizando, pero puede prevenir errores
críticos cuando se comienza a optimizar el código (que es cuando
el compilador empezará a buscar lecturas redundantes).
Las palabras reservadas const
y volatile
se
verán con más detalle en un capítulo posterior.