volatile 的用法

一:告诉compiler不能做任何优化

   比如要往某一地址送两指令:
   int *ip =...; //
设备地址
   *ip = 1; //
第一个指令
   *ip = 2; //
第二个指令
  
以上程序compiler可能做优化而成:
   int *ip = ...;
   *ip = 2;
  
结果第一个指令丢失。如果用volatile, compiler就不允许做任何的优化,从而保证程序的原意:
   volatile  int *ip = ...;
   *ip = 1;
   *ip = 2;
  
即使你要compiler做优化,它也不会把两次付值语句间化为一。它只能做其它的优化。这对device driver程序员很有用。

二:表示用volatile定义的变量会在程序外被改变,每次都必须从内存中读取,而不能把他放在cache或寄存器中重复使用。

      volatile char a;  
        a=0;
       while(!a){
//do some things;  
       }  
       doother();
  
如果没有 volatile doother()不会被执行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值