C-编译器优化将如何影响没有主体的for循环?

德克·布鲁尔

我有一些遗留代码,其中包含一个时间浪费循环,以留出时间来完成eeprom读取(不好的做法):

for(i = 0; i < 50; i++);

但是,为了提高速度而打开编译器优化时,会发生一些奇怪的事情。它不一定与该语句有关,但是我想知道编译器是否可以优化延时时间

伦丁

这取决于的类型i如果只是循环内没有使用的普通整数类型,则没有副作用,并且编译器可以自由地优化整个过程。

如果您声明ivolatile,则编译器被迫在循环的每一圈生成递增变量并读取变量的代码。

这是为什么您不应该在嵌入式系统中使用像这样的“烧掉”循环的众多原因之一。您还会占用100%的CPU并消耗100%的电流。并且您在系统时钟和环路之间建立了紧密的耦合,这不一定是线性的。

专业的解决方案始终是使用片上硬件定时器而不是“烧掉”循环。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在 C 中,ARM 编译器将如何优化此结构?

C编译器通过运行循环来优化循环

为什么C ++编译器没有优化未使用的参考变量?

没有主体的C#方法

我如何“告诉” C编译器不应优化代码?

为什么C编译器没有在for循环体内给出重新声明错误?

C循环优化帮助进行最终分配(禁用编译器优化)

“ C#编译器”足够聪明,可以删除由于ConditionalAttribute优化而没有副作用的代码

您可以使用 C 内联汇编来对齐指令吗?(没有编译器优化)

了解MSVS C ++编译器优化

虚拟函数编译器优化C ++

C 编译器优化的基准

C++:如果缺少函数返回语句,for 循环被优化为无限循环 - 编译器错误?

EC2上没有C编译器?

在没有C编译器的Linux上安装gcc

无论如何,有什么地方可以解决C语言中的编译器优化问题?

Java和C ++中for循环的边界检查的编译器/ JIT优化

C2 JIT编译器何时触发Java循环预测优化?

Intel循环速度编译器c

有没有一种方法可以强制c ++编译器不优化静态库中的特定静态对象?

关于变量范围的C / C ++编译器优化

C / C ++优化编译器由于使用模板而损坏

C ++如何处理NAN?有没有一种标准的方法还是编译器相关的?

有/无throw / noexcept函数的潜在C ++编译器优化

是否有C#编译器为“优化代码”定义,如存在DEBUG或TRACE?

编译器如何优化C#中的异常过滤器?

编译器(Visual C++)如何通过索引优化访问向量元素?

IBM XL C / C ++编译器:“没有有效的目标设备”

如何在没有C ++编译器聪明的情况下实现GLSL vec *构造语法?