Si piuttosto dipende da cosa sono i codici e quanti ce ne sono. I buoni compilatori hanno vari trucchi che usano per ottimizzare le dichiarazioni di switch, alcune delle quali non verranno utilizzate con istruzioni if / then diritte. La maggior parte sono abbastanza brillanti da eseguire semplici calcoli matematici o utilizzare tabelle di ricerca/salto per il caso 0, 1, 2 o caso 3, 6, 9 per esempio.
Naturalmente alcuni non lo fanno, e molti sono facilmente sventati da insiemi di valori insoliti o irregolari. Inoltre, se il codice per la gestione di diversi casi sembra molto simile, il taglio e l'incolla possono causare problemi di manutenzione.Se si dispone di molti codici, ma possono essere divisi in modo algoritmico in gruppi, si potrebbe prendere in considerazione diversi/nidificato istruzioni switch, per esempio, piuttosto che:
switch (code) {
case 0x0001: ...
case 0x0002: ...
...
case 0x8001: ...
case 0x8002: ...
...
}
È possibile utilizzare:
if (code & 0x8000) {
code &= ~0x8000;
switch (code) {
case 0x0001: ... // actually 0x8001
case 0x0002: ... // actually 0x8002
...
}
}
else {
switch (code) {
case 0x0001: ...
case 0x0002: ...
...
}
}
Molti interpreti di lingua decodificano opcodes in questo modo, dal momento che un opcode a byte singolo può contenere informazioni aggiuntive impacchettate in vari bit e trascrivere tutte le possibili combinazioni e i loro gestori sarebbe ripetitivo e fragile. D'altro canto, un eccessivo bit di manipolazione può vanificare qualsiasi ottimizzazione da parte del compilatore ed essere controproducente.
A meno che non si sia certi che si tratti di un vero e proprio collo di bottiglia delle prestazioni, eviterei l'ottimizzazione prematura: farlo in qualsiasi modo vi sembra ragionevolmente robusto e rapido da implementare. Come e se la tua applicazione sta funzionando troppo lentamente, profila il profilo e ottimizza di conseguenza.
fonte
2010-03-17 21:16:34
'valore = 5 * (codice + 1);' – kennytm
@KennyTM - Eccellente. Tranne che non ci sono i valori attuali ... – Rachel
+1 per una domanda interessante. –