c语言volatile原理,C++ 中 volatile 的使用

简单地说就是防止编译器对代码进行优化.好比以下程序:

XBYTE[2]=0x55;

XBYTE[2]=0x56;

XBYTE[2]=0x57;

XBYTE[2]=0x58;

对外部硬件而言,上述四条语句分别表示不一样的操做,会产生四种不一样的动做,可是编译器却会对上述四条语句进行优化,认为只有XBYTE[2]=0x58(即忽略前三条语句,只产生一条机器代码)。若是键入volatile,则编译器会逐一的进行编译并产生相应的机器代码(产生四条代码).程序员

2、volatile 的含义

volatile老是与优化有关,编译器有一种技术叫作数据流分析,分析程序中的变量在哪里赋值、在哪里使用、在哪里失效,分析结果能够用于常量合并,常量传播等优化,进一步能够死代码消除。但有时这些优化不是程序所须要的,这时能够用volatile关键字禁止作这些优化,volatile的字面含义是易变的,它有下面的做用:

1 不会在两个操做之间把volatile变量缓存在寄存器中。在多任务、中断、甚至setjmp环境下,变量可能被其余的程序改变,编译器本身没法知道,volatile就是告诉编译器这种状况。

2 不作常量合并、常量传播等优化,因此像下面的代码:

volatile int i = 1;

if (i > 0) ...

if的条件不会看成无条件真。

3 对volatile变量的读写不会被优化掉。若是你对一个变量赋值但后面没用到,编译器经常能够省略那个赋值操做,然而对Memory Mapped IO的处理是不能这样优化的。<

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值