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

每日一C之volatile

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

 今日贝壳:C语言volatile用于避免因编译器优化导致的错误
            CPU访问内存的速度远快于访问设备地址,访问寄存器速度又快于内存,为了提高程序的运行速度,编译器会对程序进行优化。如:
            buffer=Read(0xEE);    //读取0xEE端口数据,存入a
            a=buffer;
            buffer=Read(0xEE);    //读取0xEE端口数据,存入b
            b=buffer; 
编译器可能会优化成:
            buffer=Read(0xEE);
            a=buffer; 
            b=buffer;                      //此次优化能减少一次设备访问
     问题:如果0xEE端口内容实时更新,此次优化将会违背程序的初衷, volatile则用于解决此问题,提示编译器不要对此变量进行优化,从而保证实时性。用法如下:
           volatile buffer=Read(0xEE);
     使用场合:volatile用于修饰可能被外界中断修改的变量,或其他线程修改的变量等。
                             1.中断程序
                             2.多线程程序
等程序设计中常会使用到volatile。
                    Have a nice day !

           

你可能感兴趣的:(多线程,volatile,volatile关键字,编译器优化,C面试小知识)