variable tipos reservadas programacion palabras lenguaje identificadores ejemplos constantes claves c volatile

reservadas - tipos de identificadores en programacion



¿La palabra clave volátil en lenguaje C? (6)

Considere cualquiera de los siguientes:

  • una aplicación multi-hilo,
  • una aplicación que utiliza memoria compartida,
  • una aplicación que se ejecuta en una plataforma que asigna registros de E / S al espacio de direcciones,
  • una aplicación con hardware DMA ocurriendo en segundo plano.

En cada una de estas situaciones, la memoria se puede alterar fuera del hilo actual.

Tenga en cuenta que " siempre que el valor de una variable sea un cambio en el registro, entonces el valor debería afectar a la memoria " es correcto, pero no está muy claro.

Esta pregunta ya tiene una respuesta aquí:

Tengo una pregunta sobre volatile en lenguaje C.

Leí un tutorial pero aún no puedo entenderlo, algunos dicen que la volatile le dice al complaciente optimizador que las operaciones que involucran esta variable no deben optimizarse de ciertas maneras. esto significa que siempre que el valor de una variable sea un cambio en el registro, entonces el valor debería afectar la memoria.

Y también algunos dicen que volátil significa que el valor se puede cambiar por medios fuera de este código.

¿No puedo entender el segundo dicho, por lo que la variable volátil puede cambiarse por fuera de este código? ¿cómo? ¿Y estos dos dicen ambos, verdad?


Declarar una variable volátil significa que está ordenando al compilador que no optimice el fragmento de código alrededor de esa variable. Esto es para forzar a la cpu a NO usar el valor variable de los registros locales o la memoria caché, pero para obtener el valor de la memoria principal cada vez.


La declaración "el valor se puede cambiar por fuera de este código" básicamente significa que otro programa o hardware puede actualizar esa variable. Esto es totalmente posible. Una forma de pensar esto es relacionar este concepto con un archivo que se comparte entre múltiples programas. Un archivo puede ser abierto, escrito y leído por muchos programas a la vez. Cuando lea un archivo, querrá asegurarse de que está leyendo la última actualización y no la más antigua.

Volviendo a la palabra clave volátil, colocando volátil antes de una variable, en efecto, hace lo mismo. Se asegura de que lo que está leyendo de la variable no se basa en la optimización del compilador o en una copia antigua de la variable que tenía su programa. Además, la palabra clave volátil garantiza que la variable se recupere de la memoria en cada acceso. Por lo tanto, ambas declaraciones son correctas con respecto a la palabra clave volátil.


Una ubicación de memoria se puede cambiar fuera de un código de programas en una gran cantidad de formas. Por ejemplo, una lectura DMA de un disco puede escribir en un búfer, o un dispositivo asignado en la memoria puede cambiar una ubicación debido a algún evento en el dispositivo.


esto aborda, por ejemplo, aplicaciones de subprocesos múltiples: el valor de una variable puede cambiarse mediante varios subprocesos y, por lo tanto, debe estar "sincronizado" con la memoria en cada acceso (independientemente de si leer o escribir el valor).


C no es necesariamente para las computadoras. Por ejemplo, si está desarrollando para Game Boy Advance, a menudo se encuentra con ubicaciones de memoria modificadas por el hardware, por lo que es posible que no modifique la variable en su código, pero se modifique de todos modos. Eso es lo que significa volatile .

Al agregar la palabra clave volatile , le está diciendo al compilador que "el valor almacenado en esta variable (ubicación de la memoria) podría cambiar sin que mi código haga nada".