在一行中进行多步计算是否更好?
这个问题专门针对嵌入式系统的 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;
}
通常来说,一般来说?
我的直觉是,单行表达式可能更容易让编译器优化,但我不编写编译器,所以我不确定。
回答
编译器如今表现得如此出色,以至于打扰这种微优化几乎毫无意义。应该优化算法,而不是代码排列。做其他人更容易阅读和理解的事情。
使用 GCC(第一级优化)编译这两个代码会提供相同的汇编输出,因此它们完全等效:https :
//godbolt.org/z/91rrc4E69