2

次の2つの形式の遅延インスタンス化のどちらがより高速なアセンブリコードを生成するかを知りたいです。コードは次のとおりです。

1位:

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

2番目:

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

4 に答える 4

1

いいえ、そのように簡単です。そして、なぜそれが必要なのですか。

于 2012-05-21T19:15:28.583 に答える
1

これは実際には、三項演算子と通常のifステートメントの問題です。どちらも速くなることはないので、それは本当に美学/好みの問題です。

于 2012-05-21T19:11:14.370 に答える
1

これは10年前の問題かもしれませんが、現在、コンパイラーは文字通りternary演算子やif-elseステートメントとの違いを認識しています。私のアドバイスは、コードをより読みやすく、保守しやすく、効率的に保つことに集中する必要があるということです。この場合、リソースやメモリの使用量は気にしないでください。

于 2012-05-21T19:18:25.267 に答える
0

さて、読みやすい方を選択してください。

現在、コンパイラ最適化の観点から、ほとんどの最適化コンパイラには、「if-conversion」などと呼ばれるオプティマイザパスが含まれています。これは、SIMPLEブランチを条件付き移動命令に変換できるパスです。あなたの場合、ブランチの1つに関数呼び出しがあるので、これは問題ではありません。第二に、適切な分岐予測を備えたスーパースカラーOoOプロセッサでは、条件付き移動はほとんどの場合、単純な分岐と比較して悲観的であるため、実際、そのようなCPUを対象とするコンパイラはif変換を実行しない可能性があります。

于 2012-05-21T19:17:18.970 に答える