5

czytałem na StackOverflow, że za pomocąCzy przełącznik jest tak zły, jak gdyby?

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

może być nieskuteczne ze względu na podatność na oddział misprediction (patrz this question na przykład).

więc jest switch -construct np

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

inaczej w tym względzie (poza tym, że nie pozwoliło na trzech możliwości)?

+6

To bardzo rzadka definicja "drogiego"! To tak jakby powiedzieć, że 0,0001 $ jest drogie. – Gabe

+1

@Gabe: jak zawsze, zależy to od aplikacji. JEŚLI potrzebujesz wydać 0,0001 $ kilka miliardów razy, zaczyna to mieć znaczenie (chociaż zgadzam się, że prawie nigdy nie jest to większość kosztów). –

+0

@RodyOldenhuis: +1 – nobalG

Odpowiedz

4

if wyciągi nie są "drogie", mogą być rozgałęzienia warunkowe. Problem nie dotyczy wielu różnych instrukcji wysokiego poziomu, które wybierzesz - if, switch, for, while, itd.. Problem polega na tym, że nowoczesne komputery pracują bardzo dobrze, wykonując bezwarunkową ścieżkę instrukcji, ale kiedy jest punkt decyzyjny, mogą zwolnić. Ponieważ nie można zrobić nic ciekawego w obliczeniach bez punktów decyzyjnych (, tj., gałęzie warunkowe), równie dobrze można zignorować wybór konstrukcji języka wysokiego poziomu.

+2

Instrukcje switchy niekoniecznie kompilują się do gałęzi warunkowych (pomyśl o tabelach skoków). – sepp2k

+1

Domyślam się, że głównym punktem jest tutaj, nie martw się o to, chyba że uruchamiasz kawałek kodu tysięcy (lub milionów) razy ... –

+0

@ sepp2k Uzgodnione. Ale jest to decyzja kompilatora i może zależeć od konkretnych wartości. Bez względu na to, nie chodzi o to, że "jeśli kontra przełącznik", to "warunkowe przewidywanie rozgałęzień". –

Powiązane problemy