2013-05-24 16 views
6

In Vai, switch es sono molto più flessibili che in C (e C++) in quanto in grado di gestire i casi di espressioni booleane e sostituire grandi else - if scale apparentemente del tutto, in particolare con il default blocchi .tasto Go vs if-else efficienza

switch { 
    case x < 5 && y > 2: 
     //... 
    case y == 1 || x > 2: 
     //... 
    default: 
} 

C'è qualche vantaggio dell'efficienza di utilizzare un switch over else-if in Go? Sembra che l'efficienza potenziata venga persa dalla flessibilità di switch. Spetta al compilatore solo capire e vedere se può fare un jump table?

Esiste un vantaggio in termini di prestazioni nell'utilizzo di switch su if e else?

risposta

8

A meno che tutte le case siano costanti integrate, si perde la possibilità di trasformare lo switch in una tabella di salto.

Quindi, nella migliore delle ipotesi, Go switch potrebbe essere equivalente a C++ s 'switch se si usa solo costanti integrale, ma per il resto non sarà più efficiente di if/else.

9

È completamente compito del compilatore di capirlo e scegliere una buona strategia di implementazione per il codice. Puoi sempre scoprire quale codice il compilatore sta generando richiedendo un elenco di assembly dell'output del compilatore. Vedi lo -S option nel compilatore Go.

2

È sicuramente irrilevante per le prestazioni dell'applicazione. C'è probabilmente un'altra situazione più complessa in cui è possibile migliorare le prestazioni. Come salvare una singola query SQL è probabilmente come 1 milione se/else/switch.

Non preoccuparti troppo dei dettagli e concentrati su cose di livello superiore.

+5

Questa è una risposta molto utile. Grazie per avermi detto di ignorare la domanda, ora capisco. –

+0

Come per tutte le ottimizzazioni, dovrebbero essere guidate da misurazioni e analisi piuttosto che preoccuparsi di dettagli che potrebbero non avere alcun impatto. Ma se il tuo interruttore/caso è profondamente annidato in un ciclo interno, il suo comportamento potrebbe essere molto significativo. Come ho detto, sono necessarie misurazione e analisi. –