Volatile
- volatile作为类型修饰符,用它声明的变量可以被某些编译器未知因素(os,硬件,线程)改变。通过volatile告诉编译器不应对这些对象进行优化[当使用 -O优化时,更改const变量的指令会被更改,此时需要用const volatile声明要修改的const变量]
- volatile声明的变量,每次访问从内存中取值。(没有被volatile声明的变量可能被编译器优化,从CPU寄存器中取值)
- const可以是volatile(只读的状态寄存器)
- 指针可以使volatile
使用编译器-O3优化,且不声明Volatile
[narendra@ubuntu]$ gcc -O3 volatile.c -o volatile –save-temps
[narendra@ubuntu]$ ./volatile
Initial value of local : 10
Modified value of local: 10
[narendra@ubuntu]$ ls -l volatile.s
-rw-r–r– 1 narendra narendra 626 2016-11-19 16:21 volatile.s
使用编译器-O3优化,声明Volatile
[narendra@ubuntu]$ gcc -O3 volatile.c -o volatile –save-temp
[narendra@ubuntu]$ ./volatile
Initial value of local : 10
Modified value of local: 100
[narendra@ubuntu]$ ls -l volatile.s
-rw-r–r– 1 narendra narendra 711 2016-11-19 16:22 volatile.s
[narendra@ubuntu]$