volatile类型限定符的认识

84520193 2020-06-26

volatile限定符的作用就是告知计算机,代理可以改变用volatile定义的变量的值,一般它被用于多个同时运行的线程中的共享数据,

例如:一个地址可能储存着当前系统的时钟时间,无论程序做什么,地址上的值都会随时间的变化而改变,或者这个地址是负责接收另一个

计算机传来的一些信息,就是这个地址储存的内容随时都会改变。

先认识一下volatile的语法

volatile int local; //local是一个易变的变量

volatile int * polc; // polc是一个指向易变位置的指针

那么volatile的作用是什么呢?就是涉及到一个编译器的优化问题:

例如:

val1=x;

/*中间是不是用x的一些代码*/

val2=x;

分析:智能的编译器会注意到以上代码使用了两次的x,但并没有改变他的值,于是编译器就把它的值临时储存在寄存器中,然后在val2需要使用x的时候,才从寄存器中

读取x的值,并不是从x的原始地址的内存位置上读取,这样可以节约时间,这个过程被称为高速缓存(caching),如果在这中间过程一些其他的代理改变了x的值,但是编译器不知道

那么这段程序x的值赋给val2就已经过时了,所以加上volatile定义x这个变量后,编译器不会进行高速缓存。

此内容来自《C primer plus》加上自己的理解,有错误的话各位大神请在评论区指出!

相关推荐