您的位置:首页 > 编程语言 > C语言/C++

【每日一C之十一】C语言volatile

2014-04-03 21:51 267 查看


每日一C之volatile

       每天拾一个C语言贝壳,厚积薄发,积跬步以致千里。


 今日贝壳:C语言volatile用于避免因编译器优化导致的错误。
            CPU访问内存的速度远快于访问设备地址,访问寄存器速度又快于内存,为了提高程序的运行速度,编译器会对程序进行优化。如:
            buffer=Read(0xEE);
   //读取0xEE端口数据,存入a

            a=buffer;
            buffer=Read(0xEE);
   [b]//读取0xEE端口数据,存入b
[/b]

            b=buffer; 
编译器可能会优化成:
            [b]buffer=Read(0xEE);[/b]
[b]            a=buffer; [/b]
[b]            b=buffer;
                     //此次优化能减少一次设备访问
[/b]
     问题:如果0xEE端口内容实时更新,此次优化将会违背程序的初衷, volatile则用于解决此问题,提示编译器不要对此变量进行优化,从而保证实时性。用法如下:
           volatile

[b]buffer
=Read(0xEE);[/b]
     使用场合:volatile用于修饰可能被外界中断修改的变量,或其他线程修改的变量等。
                             1.中断程序
                             2.多线程程序
等程序设计中常会使用到volatile。
[b]                    [/b][b]Have
a nice day !
[/b]

           
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息