titulo - ¿Por qué usamos palabras clave volátiles en C++?
palabras reservadas en c++ (2)
Posible duplicado:
C ++: ¿Cuándo te ha ayudado la palabra clave volátil?
Nunca lo he usado pero me pregunto por qué la gente lo usa. ¿Qué es exactamente lo que hace? Busqué en el foro, solo lo encontré en C # o temas de Java.
Considere este código,
int some_int = 100;
while(some_int == 100)
{
//your code
}
Cuando este programa se compila, el compilador puede optimizar este código, si encuentra que el programa nunca intenta cambiar el valor de some_int
, por lo que puede verse tentado a optimizar el ciclo while cambiándolo de while(some_int == 100)
simplemente while(true)
para que la ejecución pueda ser rápida (ya que la condición en el bucle while parece ser siempre true
). (Si el compilador no lo optimiza, entonces debe obtener el valor de some_int
(si no está cargado en un registro) y compararlo con 100, 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 del cual el compilador no está al tanto , ya que no puede verlo; Pero es como lo has diseñado. ¡En ese caso, la optimización del compilador no produciría el resultado deseado!
Por lo tanto, para garantizar el resultado deseado, debe detener de alguna manera al compilador para que no optimice el ciclo while. Ahí es donde la palabra clave volatile
juega su papel. Todo lo que necesitas hacer es esto,
volatile int some_int = 100; //note the ''volatile'' qualifier now!
En otras palabras, me gustaría explicar esto de la siguiente manera:
volatile
le dice al compilador que,
"Hola compilador, soy volátil y, sabes, puedo ser cambiado por algún XYZ del que ni siquiera estás consciente. Ese XYZ podría ser cualquier cosa. Tal vez algún alienígena llamado programa. Tal vez algo de iluminación, alguna forma de interrupciones, volcanes, etc. pueden mutarme. Tal vez. ¡Nunca sabes quién me va a cambiar! Así que, oh ignorante, deja de jugar a un dios que todo lo sabe, y no te atrevas a tocar el código donde estoy presente. ? "
Bueno, así es como volatile
evita que el compilador optimice el código. Ahora busca en la web para ver algunos ejemplos de ejemplos.
Cotización del Estándar C ++ ($ 7.1.5.1 / 8)
[..] volatile es una sugerencia para la implementación para evitar una optimización agresiva que involucre al objeto porque el valor del objeto puede cambiarse de manera indetectable por una implementación. [...]
Tema relacionado:
¿Hacer que una estructura sea volátil hace que todos sus miembros sean volátiles?
En la programación de computadoras, particularmente en los lenguajes de programación C, C ++ y C #, una variable u objeto declarado con la palabra clave volatile
generalmente tiene propiedades especiales relacionadas con la optimización y / o la creación de hilos. En términos generales, la palabra clave volatile
está destinada a evitar que el (pseudo) compilador aplique cualquier optimización en el código que asume que los valores de las variables no pueden cambiar "por sí solos". (c) Wikipedia