In che modo l’istruzione caso switch è implementata o funziona internamente?

Ho letto da qualche parte che l’istruzione switch utilizza “Ricerca binaria” o alcune tecniche di ordinamento per scegliere esattamente il caso corretto e questo aumenta le sue prestazioni rispetto al ladder in caso contrario.

E anche se diamo il caso in ordine, lo switch funziona più velocemente? è così? Puoi aggiungere i tuoi preziosi suggerimenti su questo?

Abbiamo discusso qui della stessa cosa e abbiamo pianificato di postare come una domanda.

In realtà sta al compilatore come viene realizzata un’istruzione switch nel codice.

Tuttavia, la mia comprensione è che quando è adatto (cioè casi relativamente densi), viene usata una tabella di salto.

Ciò significherebbe qualcosa come:

 switch(i) { case 0: doZero(); break; case 1: doOne(); case 2: doTwo(); break; default: doDefault(); } 

Sarebbe finito per essere compilato per qualcosa di simile (pseudo-assemblatore orribile, ma dovrebbe essere chiaro, spero).

 load i into REG compare REG to 2 if greater, jmp to DEFAULT compare REG to 0 if less jmp to DEFAULT jmp to table[REG] data table ZERO ONE TWO end data ZERO: call doZero jmp END ONE: call doOne TWO: call doTwo jmp END DEFAULT: call doDefault END: 

Se questo non è il caso, ci sono altre possibili implementazioni che consentono una certa “migliore di una sequenza di condizionali”.

Il modo in cui viene implementato dipende da quali valori hai. Per valori che sono vicini all’intervallo, il compilatore genererà generalmente una tabella di salto. Se i valori sono distanti, genererà un ramo collegato, usando qualcosa come una ricerca binaria per trovare il giusto valore.

L’ordine delle istruzioni switch in quanto tali non ha importanza, farà la stessa cosa sia che tu abbia l’ordine in ordine ascendente, discendente o casuale – fai ciò che ha più senso in relazione a ciò che vuoi fare.

Se non altro, switch è in genere molto più facile da leggere rispetto a una sequenza if else.

Su alcuni googling ho trovato un link interestin e ho pianificato di postare come risposta alla mia domanda. http://www.codeproject.com/Articles/100473/Something-You-May-Not-Know-About-the-Switch-Statem

I commenti sono benvenuti ..