本文主要是介绍volatile 关键字的用法说明,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
volatile字面翻译为不稳定的,易变的。
一般编译器优化时,如果一个数据已经读取进寄存器,后续会优先从寄存器中取值来减少访问存储时间,但如果此数值会随时变动,结果就会出现错误
以下测试
#include <stdio.h>
int main()
{const int v = 0;int *vp = (int*) &v; int tmp = v;*vp = 1;printf("%d %d\n",tmp,v);
}
对比一级优化输出
gcc test.c
./a.out
0 1
gcc -O1 test.c
./a.out
0 0
可以看出不优化和优化时结果并不相同。
添加volatile关键字后
#include <stdio.h>
int main()
{volatile const int v = 0;int *vp = (int*) &v; int tmp = v;*vp = 1;printf("%d %d\n",tmp,v);
}
三级优化输出
gcc -O3 test.c
./a.out
0 1
所以对多线程或常变的数据包括寄存器声明volatile,明确靠诉编译器,此数据不需优化,每次从原位取值。
这篇关于volatile 关键字的用法说明的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!