因此,在同事的建议下,我刚刚测试了三元运算符和等效的 If-Else 块之间的速度差异...并且三元运算符生成的代码似乎比 If-Else 快 1 到 2 倍。我的代码是:
gettimeofday(&tv3, 0);
for(i = 0; i < N; i++)
{
a = i & 1;
if(a) a = b; else a = c;
}
gettimeofday(&tv4, 0);
gettimeofday(&tv1, 0);
for(i = 0; i < N; i++)
{
a = i & 1;
a = a ? b : c;
}
gettimeofday(&tv2, 0);
(抱歉使用 gettimeofday 而不是clock_gettime...我会努力改善自己。)
我尝试更改块的计时顺序,但结果似乎仍然存在。是什么赋予了?此外,If-Else 在执行速度方面表现出更大的可变性。我应该检查 gcc 生成的程序集吗?
顺便说一句,这一切都处于优化级别零 (-O0)。
我是在想象这一点,还是有什么我没有考虑到的,或者这是一个依赖于机器的事情,还是什么?任何帮助表示赞赏。
三元运算符很有可能被编译成cmov
而 if/else 的结果是cmp
+jmp
。只需查看一下程序集(使用 -S)即可确定。启用优化后,无论如何都不再重要了,因为任何好的编译器都应该在两种情况下生成相同的代码。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)