关于小悟志网站地图归档友情链接联系Feed

云上小悟 + 

当前位置 : 首页 » InfoTech » C语言中volatile的用法 正文

C语言中volatile的用法

InfoTech
2017年6月3日 / 19次阅读
标签:CC++

拍拍贷

文章《C语言中volatile的用法》的特色图片

volatile能够影响编译器编译的结果,指出volatile的变量是有可能随时可能发生变化的(在本程序外发生,比如共享变量),与volatile变量有关的运算,不要进行编译优化,以免出错。

 

例如:

volatile int i=10;
int j = i;
...
int k = i;

volatile告诉编译器i是随时可能发生变化的,每次使用它的时候必须从i的内存地址中读取,因而编译器生成的可执行码会重新从i的地址读取数据放在k中。而优化做法是:由于编译器发现两次从i读数据的代码之间的代码没有对i进行过操作,它会自动把上次读的数据放在k中,而不是重新从i里面读。这样以来,如果i是一个寄存器变量或者表示一个端口数据就容易出错,所以说volatile可以保证对特殊地址的稳定访问,不会出错。

 

总计一下:

(1)告诉compiler不能做任何优化;

(2)用volatile定义的变量会在程序外被改变,因此程序每次都必须从内存中读取,而不能把他放在cache或寄存器中重复使用。(所谓程序外,可能就是并发的线程,变量为共享的变量;这样的变量,一旦被修改,就要马上写会到内存,不能放在寄存器中等待下次被直接使用。)

 

volatile基本可以做到两件事情:

(1)阻止编译器为了提高速度将一个变量缓存到寄存器内而不写回;

(2)阻止编译器调整操作volatile变量的指令顺序(编译器的优化,应该是无法考虑执行过程中的并发因素)。

本文链接:http://www.maixj.net/ict/c-volatile-15650
云上小悟 麦新杰(QQ:1093023102)

-- (*^-^*) --

相关文章

评论是美德

无力满足评论实名制,评论对非实名注册用户关闭,有事QQ:1093023102.


前一篇:
后一篇:

栏目精选


©Copyright 麦新杰 Since 2014 云上小悟独立博客版权所有 备案号苏ICP备14045477号-1

网站二维码
拍拍贷
go to top