用于制作应用程序的volatile变量

时间:2013-09-08 01:37:34

标签: c linux optimization

我是这个领域的新手。以前我在做微控制器编程,我使用volatile变量来避免编译器优化。但我从未在变量声明之前看到过这样的易变声明。这是否意味着编译是在Arago构建中没有任何优化的情况下完成的。我有两个问题。

  1. 如何在编译期间启用不同类型的优化,例如Angstrom构建中的速度和空间优化?

  2. 如果它已经是优化编译,为什么我们不需要volatile声明?

1 个答案:

答案 0 :(得分:2)

如果您使用gcc进行编译,请添加/修改CFLAGS

  • -O2-O3启用一系列通用性能优化。

  • Os启用代码大小优化。

可以使用一长串控制单个gcc编译器优化选项的标志here


大多数时候volatile不是用于优化代码,而是用于ensure validity of data

变量声明为volatile告诉编译器可以在实现外部的任何时间修改变量

  • 操作系统
  • 另一个执行线程
    - 中断程序
    - 信号处理程序
  • 底层硬件
  

由于volatile限定变量的值可以随时更改,因此只要在代码中引用变量,就必须始终访问实际变量。

这意味着编译器无法对变量执行优化。标记变量volatile会强制编译器生成忽略CPU寄存器中变量的代码,并实际读取映射到变量引用的地址的底层内存/硬件寄存器。

同时查看使用volatile along-with compiler optimisations的各个方面。