zoukankan      html  css  js  c++  java
  • 关于volatile

    也许读者会注意到,端口寄存器的变量使用了volatile 修饰符,这是因为C语言在编译的时候会进行某种优化来提高效率,比如下面这段代码
    int i = 1;
    int a = i;
    int b = i;
    对于编译器来说,处理a=i 的时候,是先把i的内容放入寄存器中,然后把寄存器的内容付值给a, 当处理b = i的时候,编译器发现在这中间并没有其它代码,也就是认为i的内容不会发生变化,因此不需要再一次从i中读取内容,而是直接把刚才放入寄存器里的内容再付值给b, 这对一般的程序是没有任何问题的,而且提高了效率。但是存在一些编译器不知道的原因,让i 的值产生了变化,那么就在b=i的时候,b得到值并不是i真正的内容。对于端口的地址来说,其内容是有可能被改变,而编译器无法知道的这个改变,因此,我们通过volatile 修饰符告知编译器,i的内容,可能会随时变化,不要对i的操作进行优化,读取操作不要通过中间的寄存器读取,必须每次都去i的地址去取值。这就保证了可以正确的取到i的内容了。

     

  • 相关阅读:
    python:(类)私有
    Python:多继承时的继承顺序
    python基础:继承
    年终总结
    cocos版本说明
    WPF学习系列 游戏-选张图片做成9宫格拼图
    SmartAssembly使用失败记录
    WPF学习系列 绘制旋转的立方体
    自适应布局思路
    webfrom 总结
  • 原文地址:https://www.cnblogs.com/foohack/p/3582311.html
Copyright © 2011-2022 走看看