5

は、私が(例えばthis questionを参照)により、分岐予測ミスに対する感受性に非効率的になることがありスイッチは、スイッチと同じくらい悪いですか?

if(someCondition) 
{ 
    someCode(); 
} 
else 
{ 
    alternateCode(); 
} 

を使用していることをStackOverflowの上でお読みください。

だから、例えば、switch -constructある

switch (someCondition) 
{ 
    case (someCase): 
     something(); 
     break; 
    case (otherCase): 
     someOtherInstructions(); 
     break; 
    default: 
     defaultAction(); 
     break; 
} 

この点では何が違う(私は三つの可能性のために許可されているという事実に加えて)?

+6

これは非常にまれな定義の '高価な'です! $ 0.0001は高価だと言っているようなものです。 – Gabe

+1

@Gabe:いつものように、それはアプリケーションによって異なります。 $ 0.0001を何十億回も費やす必要がある場合は、それは問題になります(コストの大半はほとんどだと私は同意しますが)。 –

+0

@RodyOldenhuis:+1 – nobalG

答えて

4

ifステートメントは「高価」ではないため、条件分岐がある可能性があります。問題は、あなたが書くために選択した多くの異なる高レベルのステートメントのどれではありません - switchforwhileなど問題は、現代のコンピュータは無条件の命令経路を実行するのが非常にうまくいくということですが、意思決定のポイントがあると遅くなる可能性があります。意思決定ポイントなしでコンピューティングに興味のあることは何もできないので(、すなわち、条件付きブランチ)、高水準の言語構成の選択を無視することもできます。

+2

switchステートメントは条件分岐にコンパイルする必要はありませんが(ジャンプテーブルを考える)。 – sepp2k

+1

ここで重要なのは、何千ものコードを実行していない限り、心配しないでくださいね... –

+0

@ sepp2k合意しました。しかし、それはコンパイラの決定であり、関連する特定の値に依存する可能性があります。それにかかわらず、ポイントは "if vs switch"ではなく、 "条件分岐予測"です。 –

関連する問題