volatile 的用法

来源:互联网 发布:php.ini 大文件大小 编辑:程序博客网 时间:2024/05/20 05:30

一:告诉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()不会被执行

原创粉丝点击