fnhp.net
当前位置:首页 >> C volAtilE的作用 >>

C volAtilE的作用

举例说明:volatile int i=10; int j = i; int k = i; volatile 告诉编译器i是随时可能发生变化的,每次使用它的时候必须从i的地址中读取,因而编译器生成的可执行码会重新从i的地址读取数据放在k中. volatile 影响编译器编译的结果,指出,volatile

为了避免编译器进行优化吧好像,比如为了实现无操作延时:asm("mov r0, r0");可能会被编译器优化掉,但是如果加上volatile关键字,就不会被优化,而是严格按照编写的代码放入汇编后的文件中:asm volatile("mov r0, r0");这样就可以实现不被优化

就是为了避免非预期的被更改

我就用上面的例子吧 volatile int i = 10; int k = i; 这段代码如果没有加上volatile,它的执行过程是 i = 10, 10 ->reg寄存器,k = reg值,就是说,k=i实际上是从寄存器里读出来的.这样快捷高效,当然并不是每次都这样,因为寄存器有限.如果在10->reg寄存器的时候,i存储的内存变化了,也就是别的线程修改了i的值,k=i仍然会按照i=10来执行 加上volatile后,执行过程是 i = 10, k = *(int *)(&i); 它会从i的内存地址上去读,当然值会非常准确,但是效率会比从寄存器中读要慢很多.

详解c中volatile关键字 volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据.如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用

volatile是易变的,不稳定的意思,volatile是关键字,是一种类型修饰符,用它修饰的变量表示可以被某些编译器未知的因素更改,比如操作系统、硬件或者其他线程等,遇到这个关键字声明的变量,编译器对访问该变量的代码不在进行优化,从而可以提供对特殊地址的稳定访问.volatile 关键字告诉编译器该变量是随时可能发生变化的,每次使用它的时候必须从内存中取出他的值,因而编译器生成的汇编代码会从原内存地址中读取数据使用. 如果一个寄存器或者变量表示一个端口或者多个线程的共享数据,就容易出错,所以volatile可以保证对特殊地址的稳定访问.

volatile 关键字表示,编译器进行强制 I/O 寻址,而非读取寄存器的值.一般情况下,连续使用的变量,编译器会先把数据读出来,并且保存到寄存器里,使用的时候,直接读取寄存器里的数据,这样处理速度会快一点,但是,有些时候,比如实时读取按键值,或者其它要求比较实时的数据,就不能使用寄存器了,必须要用到 volatile 关键字了.

你好!volatile 影响编译器编译的结果,指出,volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错希望对你有所帮助,望采纳.

volatile关键字的作用(zz)恐怕比较一下volatile和synchronized的不同是最容易解释清楚的.volatile是变 量修饰符,而synchronized则作用于一段代码或方法;看如下三句get代码:int i1; int geti1() {return i1;}volatile int i2; int geti2() {return i2;}int i

当然有用了,定义了个x变量,如果不用voliate申明的话,搞不好被其他什么地方修改了都不知道,用voliae申明的话,在你的程序里这个值不变的!

网站首页 | 网站地图
All rights reserved Powered by www.fnhp.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com