¿Por qué utilizamos la palabra clave volátil? [duplicar]

Resuelto Sarfaraz Nawaz asked hace 13 años • 2 respuestas

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.

Sarfaraz Nawaz avatar Dec 14 '10 16:12 Sarfaraz Nawaz
Aceptado

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 whilebucle 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 whileel bucle parece ser truesiempre). (Si el compilador no lo optimiza, entonces tiene que obtener el valor de some_inty 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_intdesde 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 whilebucle. Ahí es donde la volatilepalabra 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:

volatilele 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 volatileevita 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?

Sarfaraz Nawaz avatar Dec 14 '2010 09:12 Sarfaraz Nawaz

En programación de computadoras, particularmente en los lenguajes de programación C, C++ y C#, una variable u objeto declarado con la volatilepalabra clave generalmente tiene propiedades especiales relacionadas con la optimización y/o el subprocesamiento. En términos generales, la volatilepalabra 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

Ivan avatar Dec 14 '2010 09:12 Ivan