¿Cómo sé si gcc está de acuerdo en que algo es volátil?

Considera lo siguiente

volatile uint32_t i;

¿Cómo sé si gcc trató o no i como volátil? Se declararía como tal porque ningún código cercano lo va a modificar, y es probable que su modificación se deba a alguna interrupción.

No soy el peor programador de ensambles del mundo, pero juego uno en la televisión. ¿Alguien puede ayudarme a entender cómo sería diferente?

Si toma el siguiente código estúpido:

#include <stdio.h>
#include <inttypes.h>

volatile uint32_t i;

int main(void)
{
        if (i == 64738)
                return 0;
        else
                return 1;
}

Compílelo a formato de objeto y desmóntelo a través de objdump, luego haga lo mismo después de eliminar 'volátil', no hay diferencia (según diff). ¿La declaración volátil está demasiado cerca de donde se verificó o modificó o debería usar siempre algún tipo atómico al declarar algo volátil? ¿Algunas banderas de optimización influyen en esto?

Nota, mi estúpida muestra no coincide completamente con mi pregunta, me doy cuenta de esto. Solo estoy tratando de averiguar si gcc trató o no la variable como volátil, así que estoy estudiando pequeños volcados para tratar de encontrar la diferencia.

Respuestas a la pregunta(7)

Su respuesta a la pregunta