volatile (C++)

Un calificador de tipo que puede utilizar para declarar que un objeto se puede modificar en el programa por hardware.

volatile declarator ;

Comentarios

Puede utilizar el modificador del compilador /volatile modificar cómo el compilador interpreta esta palabra clave.

Visual Studio interpreta la palabra clave de volatile de manera diferente dependiendo de la arquitectura de destino.Para la ARM, si no se especifica ninguna opción del compilador /volatile, el compilador realiza como si /volatile:iso fuera especificado.Para las arquitecturas distinto de ARM, si no se especifica ninguna opción del compilador /volatile, el compilador realiza como si /volatile:ms fuera especificado; por consiguiente, porque las arquitecturas distinto de ARM recomendamos encarecidamente que especifique /volatile:iso, y utilizamos primitivas de sincronización y intrínseco explícitos del compilador al tratar de memoria que se comparte entre subprocesos.

Puede utilizar el calificador de volatile para proporcionar acceso a las ubicaciones de memoria utilizadas por procesos asincrónicos como controladores de interrupción.

Cuando volatile se utiliza en una variable que tenga la palabra clave de __restrict, volatile tiene prioridad.

Si un miembro de struct como volatile, después volatile se propagan a la estructura del conjunto.Si una estructura no tiene una longitud que se puede copiar en la arquitectura actual mediante una instrucción, volatile se puede perder completamente en esa estructura.

La palabra clave de volatile no puede tener ningún efecto en un campo si una de las condiciones siguientes:

  • La longitud de campo volatile supera el tamaño máximo que puede copiar en la arquitectura actual mediante una instrucción.

  • La longitud de struct que contiene fuera — o si es miembro de struct posiblemente anidada supera el tamaño máximo que puede copiar en la arquitectura actual mediante una instrucción.

Aunque el procesador no reordenar accesos de memoria o quitar la - almacenable, las variables o quitar la - almacenable deben marcarse como volatile para garantizar que el compilador no reorganiza los accesos de memoria.

Objetos declarados como volatile no se utiliza en ciertas optimizaciones porque sus valores pueden cambiar en cualquier momento.El sistema lee siempre el valor actual de un objeto volatile cuando se solicita, aunque una instrucción anterior pidió un valor del mismo objeto.Además, el valor del objeto se escribe inmediatamente en la asignación.

En ISO

Si está familiarizado con la palabra clave de Volatile de C#, o el familiarizado con el comportamiento de volatile en versiones anteriores de Visual C++, tenga en cuenta que la palabra clave de volatile standard de C++11 ISO es diferente y se admite en Visual Studio cuando se especifica la opción del compilador /volatile:iso.(Para la ARM, ha especificado de forma predeterminada).La palabra clave de volatile en código de estándar de C++11 ISO se usa únicamente para el acceso de hardware; no la utilice para la comunicación de inter- subproceso.Para la comunicación de inter- subproceso, mecanismos de uso como std::atomic<T> de Biblioteca de plantillas estándar de C++.

Específicos de Microsoft

Cuando la opción del compilador /volatile:ms está utilizar- por valor predeterminado si las arquitecturas distinto de ARM se destinan - el compilador genera código adicional para mantener el orden entre referencias a objetos volátiles además de orden que mantiene las referencias a otros objetos globales.En concreto:

  • Una escritura en un objeto volatile (también conocido como escribir volatile) tiene semántica de inicio; es decir, una referencia a un objeto global o estática que aparece antes de que una escritura en un objeto volátil en la secuencia de instrucción aparece antes que volatile escribe en el binario compilado.

  • Una lectura de un objeto volatile (también conocido como volátil leído) tiene semántica de Adquiere; es decir, una referencia a un objeto global o estática que aparece después de que una lectura de memoria volátil en la secuencia de instrucción produce ese volatile lee el binario compilado.

Esto habilita los objetos volátiles que se utilizarán para la memoria bloqueos y libera en aplicaciones multiproceso.

[!NOTA]

Cuando se basa en la seguridad mejorada que se proporciona cuando se usa la opción del compilador /volatile:ms, el código es no portátil.

Vea también

Referencia

Palabras clave de C++

const (C++)

const y volatile punteros