c – C中If-Else和Ternary运算符之间的速度差…?
作者:互联网
因此,在一位同事的建议下,我刚刚测试了三元运算符和等效的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)就可以了.启用优化后,无论如何都无关紧要,因为任何好的编译器都应该在两种情况下都生成相同的代码.
标签:c,performance,ternary-operator 来源: https://codeday.me/bug/20190925/1815933.html