c语言中volatile关键字是什么含义
volatile 影响编译器编译的结果,指出,volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错,(VC++ 在产生release版可执行码时会进行编译优化,加volatile关键字的变量有关的运算,将不进行编译优化。)。
例如:
volatile int i=10;
int j = i;
...
int k = i;
volatile 告诉编译器i是随时可能发生变化的,每次使用它的时候必须从i的地址中读取,因而编译器生成的可执行码会重新从i的地址读取数据放在k中。
而优化做法是,由于编译器发现两次从i读数据的代码之间的代码没有对i进行过操作,它会自动把上次读的数据放在k中。而不是重新从i里面读。这样以来,如果i是一个寄存器变量或者表示一个端口数据就容易出错,所以说volatile可以保证对特殊地址的稳定访问,不会出错。
例如:
volatile int i=10;
int j = i;
...
int k = i;
volatile 告诉编译器i是随时可能发生变化的,每次使用它的时候必须从i的地址中读取,因而编译器生成的可执行码会重新从i的地址读取数据放在k中。
而优化做法是,由于编译器发现两次从i读数据的代码之间的代码没有对i进行过操作,它会自动把上次读的数据放在k中。而不是重新从i里面读。这样以来,如果i是一个寄存器变量或者表示一个端口数据就容易出错,所以说volatile可以保证对特殊地址的稳定访问,不会出错。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
编程语言巅峰之战,谁才是真正的王者?| InfoQ编程语言排行榜
田晓旭
2021-07-20 11:43:51
InfoQ 编程语言 2 月排行榜,更好的投票活动来了
InfoQ 中文站
2021-03-22 18:34:58
Android C++系列:JNI调用时的异常处理
轻口味
2021-11-19 10:03:53
国内最大的C++软件项目之一,WPS的“自守”之道
罗燕珊
2021-10-28 14:23:59
谈 C++17 里的 Memento 模式
hedzr
2021-10-18 14:13:51
谈 C++17 里的 State 模式之二
hedzr
2021-10-12 21:03:51
英特尔最新版C/C++编译器采用LLVM架构,性能提升明显
James R Reinders
2021-09-17 10:48:52
C++实用指南
Bartlomiej Filipek
2021-07-22 10:03:58
SpaceX龙飞船性能要求严苛,软件开发存挑战
凌敏
2021-05-14 13:43:55
纵观20年间国外码农的薪酬变化:涨幅下降,初级编码岗大幅消失
NICOLE KOW
2021-03-22 18:35:29
如果编程语言是《权力的游戏》中的角色?(上)
Sajid Lhessani
2021-03-22 18:35:23
InfoQ 编程语言1月排行榜:邀你投票
InfoQ 中文站
2021-01-21 17:28:56
2021年最值得学习的10种编程语言
Statistics and Data
2021-01-19 14:13:58
我是如何爱上 Julia 编程语言的?
Emmett Boudreau
2020-12-29 14:24:00