volatile类型限定符的认识

Posted mastermimic

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了volatile类型限定符的认识相关的知识,希望对你有一定的参考价值。

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》加上自己的理解,有错误的话各位大神请在评论区指出!

以上是关于volatile类型限定符的认识的主要内容,如果未能解决你的问题,请参考以下文章

精通C语言ANSI C 类型限定符const,volatile,restrict,_Atomic

精通C语言ANSI C 类型限定符const,volatile,restrict,_Atomic

嵌入式 C - 易失性限定符在我的中断例程中无关紧要

SSIS 处理缺少文本限定符的平面文件

具有“const CompareVPtrs”类型的表达式将丢失一些 const-volatile 限定符以便调用

传递'memcpy'的参数2从指针目标类型中丢弃'volatile'限定符