使用?:进行赋值比使用if()产生更快的汇编?

时间:2012-05-21 19:07:30

标签: objective-c c performance compilation ternary-operator

我想知道以下两种形式的延迟实例化中哪一种生成更快的汇编代码。这是代码:

第一

if (!_separatorTopBorderColor) _separatorTopBorderColor = UIColorFromHex(0x393A3B);
return _separatorTopBorderColor;

第二

_separatorTopBorderColor = _separatorTopBorderColor ?: UIColorFromHex(0x393A3B);
return _separatorTopBorderColor;

4 个答案:

答案 0 :(得分:1)

这实际上是三元运算符与常规if语句的问题。两者都不会更快,所以这真的是美学/偏好的问题。

答案 1 :(得分:1)

没有。就那么简单。为什么要这样呢。

答案 2 :(得分:1)

这可能是10年前的一个问题,但是现在,编译器确实认为与ternary运算符和if-else语句有任何区别。我的建议是,您应该集中精力保持代码的可读性,可维护性和高效性。在这种情况下,不要关心资源或内存使用情况。

答案 3 :(得分:0)

好吧,选择哪个更具可读性。

现在,从编译器优化的角度来看,大多数优化编译器都包含一个称为“if-conversion”的优化器传递或类似的传递,它是一个可以将SIMPLE分支转换为条件移动指令的传递。在你的情况下,你在其中一个分支中有一个函数调用,所以这没关系。其次,在具有良好分支预测的超标量OoO处理器上,与简单分支相比,条件移动在大多数情况下是悲观化,因此实际上针对此类CPU的编译器很可能不会进行if转换。