![]() |
1
3
通常,我们在C中做的是编写一个常规的if/else-if/else语句,并期望编译器对其进行优化。 因此,如果编译器可以知道x和y都是不需要重新计算的简单值,我们可以用C编写以下代码:
生成的优化组件应大致如下:
请注意,在上述优化的程序集中,x和y的值只加载一次,只比较一次。 以下是godbolt上的源代码和生成的程序集: https://godbolt.org/z/8YxT5Kh7P 相关说明如下:
(这里,
这是一个编写C代码的实践示例 期望 编译器以某种方式对其进行优化 依靠 然而,在许多情况下,编译器决定做我们可能没有预料到的不同事情。 因此,如果你养成了检查编译器是否确实按照你的预期执行的习惯,那么有时要准备好感到惊讶。 上述技术适用于问题中列出的所有6种情况,只要x和y是简单的值。 如果x或y需要重新评估,那么这种技术就不再有效了,你需要一种不同的方法,例如:
请注意,变量
|
![]() |
2
2
我认为你应该让编译器决定最好的方法。因此,您应该选择最易读的选项。 如果您不确定,也可以使用“编译器资源管理器”进行检查 我在这里举了一个例子: https://godbolt.org/z/v81z3rfMa |
![]() |
giantjenga · 优化整数向量到二进制向量的转换 7 月前 |
![]() |
Daniel Lobo · 使用约束进行优化 8 月前 |
![]() |
Imyaf · 在什么条件下,在组装时对“if”和“if-else”进行比较? 11 月前 |
![]() |
Sergio · python中大量数字的乘法 1 年前 |
![]() |
Sergey Dev · 临时表与表变量 1 年前 |
![]() |
John · 减少C中的内存消耗++ 1 年前 |