首页 > 解决方案 > 在一行中进行多步计算会更好吗?

问题描述

这个问题专门针对嵌入式系统的 C 编译器,但我确信它可以应用于一般编程。

在一行中编写多步数学表达式而不是将它们分解为等效的单个操作是否有任何好处,反之亦然?

例如是:

int convert(int in){
  return (int)(((long)in * 727) / 12) + 9;
}

比以下更好或更差:

int convert(int in){
  long out = (long)in;
  out *= 727;
  out /= 12;
  out += 9;
  return (int)out;
}

通常来说,一般来说?

我的直觉是单行表达式可能更容易让编译器优化,但我不编写编译器,所以我不确定。

标签: cembedded

解决方案


如今,编译器的性能如此之好,以至于为这种微优化而烦恼几乎毫无意义。应该优化算法,而不是代码排列。做别人更容易阅读和理解的事情。

使用 GCC(第一级优化)编译这两个代码会产生相同的汇编输出,因此它们是严格等效的: https ://godbolt.org/z/91rrc4E69


推荐阅读