c - 在一行中进行多步计算会更好吗?
问题描述
这个问题专门针对嵌入式系统的 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
推荐阅读
- python - 如何将字符串合并到另一个字符串
- azure - 通过 Azure 数据工厂将数据从 Azure Functions 存储到 Azure SQL Server 的最佳实践
- c# - C#扩展Log4net的ILog接口现有方法
- c - C中的argc和argv
- reactjs - 如何在 React Router v4 中获取所有参数
- c++ - c++17 map::extract 方法在 macOS 上可用吗?
- r - gbm 包和分位数回归
- java - 将 maven Shade 与 Proguard 混合
- javascript - 当我的屏幕第二次加载时,反应本机组件接收道具不加载
- c# - 从 bakcground 线程调用 UI 线程上的许多方法