Objective c 使用?:执行赋值是否比使用if()生成更快的程序集?

Objective c 使用?:执行赋值是否比使用if()生成更快的程序集?,objective-c,c,performance,compilation,ternary-operator,Objective C,C,Performance,Compilation,Ternary Operator,我想知道以下两种惰性实例化形式中的哪一种生成更快的汇编代码。代码如下: 1st: if (!_separatorTopBorderColor) _separatorTopBorderColor = UIColorFromHex(0x393A3B); return _separatorTopBorderColor; _separatorTopBorderColor = _separatorTopBorderColor ?: UIColorFromHex(0x393A3B); return _se

我想知道以下两种惰性实例化形式中的哪一种生成更快的汇编代码。代码如下:

1st:

if (!_separatorTopBorderColor) _separatorTopBorderColor = UIColorFromHex(0x393A3B);
return _separatorTopBorderColor;
_separatorTopBorderColor = _separatorTopBorderColor ?: UIColorFromHex(0x393A3B);
return _separatorTopBorderColor;
第二名:

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

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

不,就这么简单。为什么要这样做呢。

好吧,选择可读性更好的


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

10年前可能是个问题,但现在,编译器可以从字面上看出
三元
运算符和
if-else
语句的任何区别。我的建议是,您应该集中精力使代码更可读、更可维护和更高效。在这种情况下,不要关心资源或内存的使用。

如果存在任何性能差异,则说明编译器的操作是错误的。我不能说世界上没有可怕的错误/邪恶的编译器,但肯定没有你应该使用的。也请注意:
?:
(中间没有表达式)是无效的C。我怀疑这是一个问题,即使是第一个C编译器。抽象语法树很可能与if/else相同。谢谢!我只是想确定一下。