¿Por qué utilizamos la palabra clave volátil? [duplicar]
Posible duplicado:
¿Por qué existe volátil?
Nunca lo he usado pero me pregunto por qué la gente lo usa. ¿Qué hace exactamente? Busqué en el foro y solo encontré temas de C# o Java.
Considere este código,
int some_int = 100;
while(some_int == 100)
{
//your code
}
Cuando se compila este programa, el compilador puede optimizar este código, si descubre que el programa nunca intenta cambiar el valor de some_int
, por lo que puede verse tentado a optimizar el while
bucle cambiándolo while(some_int == 100)
a algo que sea equivalente a while(true)
so. que la ejecución podría ser rápida (ya que la condición en while
el bucle parece ser true
siempre). (Si el compilador no lo optimiza, entonces tiene que obtener el valor de some_int
y compararlo con 100, en cada iteración, lo que obviamente es un poco lento).
Sin embargo, a veces, la optimización (de algunas partes de su programa) puede ser indeseable , porque puede ser que alguien más esté cambiando el valor de some_int
desde fuera del programa, algo que el compilador no conoce , ya que no puede verlo; pero así es como lo has diseñado. En ese caso, la optimización del compilador no produciría el resultado deseado.
Entonces, para garantizar el resultado deseado, debe evitar de alguna manera que el compilador optimice el while
bucle. Ahí es donde la volatile
palabra clave juega su papel. Todo lo que necesitas hacer es esto,
volatile int some_int = 100; //note the 'volatile' qualifier now!
En otras palabras, lo explicaría de la siguiente manera:
volatile
le dice al compilador que,
"Oye, compilador, soy volátil y, ya sabes, puedo ser modificado por algún XYZ del que ni siquiera eres consciente. Ese XYZ podría ser cualquier cosa. Tal vez algún extraterrestre fuera de este planeta llamado programa. Tal vez algún rayo, alguna forma de interrupción, volcanes, etc. pueden mutarme. Tal vez. ¡Nunca se sabe quién me va a cambiar! Así que, ignorante, deja de jugar a ser un dios que todo lo sabe y no te atrevas a tocar el código donde estoy presente. Está bien. ?"
Bueno, así es como volatile
evita que el compilador optimice el código. Ahora busque en la web para ver algunos ejemplos de muestra.
Citando el estándar C++ ($7.1.5.1/8)
[..] volátil es una sugerencia para la implementación para evitar una optimización agresiva que involucre al objeto porque el valor del objeto podría cambiarse por medios indetectables para una implementación.[...]
Tema relacionado:
¿Hacer volátil una estructura hace que todos sus miembros sean volátiles?
En programación de computadoras, particularmente en los lenguajes de programación C, C++ y C#, una variable u objeto declarado con la volatile
palabra clave generalmente tiene propiedades especiales relacionadas con la optimización y/o el subprocesamiento. En términos generales, la volatile
palabra clave tiene como objetivo evitar que el (pseudo)compilador aplique optimizaciones en el código que asumen que los valores de las variables no pueden cambiar "por sí solos". (c)Wikipedia
http://en.wikipedia.org/wiki/Volatile_variable