我想知道下面两个不同的代码是否比另一个更好。它们执行相同的功能。我认为在实现此代码时,您会希望 if 语句包含更频繁出现的参数。
选项1
if(hoursWorked <= 40){
workedOvertime = 0;
}
else{
workedOvertime = 1;
}
Run Code Online (Sandbox Code Playgroud)
选项#2
if(hoursWorked > 40){
workedOvertime = 1;
}
else{
workedOvertime = 0;
}
Run Code Online (Sandbox Code Playgroud)
在Godbolt Compiler Explorer 上,您可以看到各种编译器对这两个版本的作用,以及 KamilCuk 的“选项 3”。
猜猜看:例如,使用 x86-64 上的 gcc 编译器和优化,它们都生成完全相同的代码。所以它没有任何区别。
(特别是,它们都使用条件设置指令,无论条件为真还是假,都不需要跳转。)
这是典型的:现代编译器足够聪明,可以看到它们都是等价的,并且无论您以哪种方式编写代码,都可以生成最好的代码。所以考虑这些事情是浪费时间。如果某种方式对于阅读程序的人来说似乎更清晰,那么就这样做。如果您认为这对人类没有任何影响,那么只需选择一种方法并继续前进。
如果您有理由相信一种情况比另一种情况更常见,您可以使用gcc 之__builtin_expect类的东西来向编译器提示这一点。这样,如果可以优化一个分支以使其比另一个更快,编译器将针对更常见的分支执行此操作。还有一些方法可以使用分析来测量更频繁地采用哪个分支,并自动通知编译器这一点。但是编译器通常不会仅仅根据您选择哪个分支是“then”和哪个是“else”来得出这样的推论。
但是,在这种情况下, using__builtin_expect不会改变任何东西,因此两个分支都已经按照编译器所知道的最佳方式进行了优化,并且它不知道有什么方法可以使任何一个更快,即使以使另一个更慢为代价.
| 归档时间: |
|
| 查看次数: |
95 次 |
| 最近记录: |