PoC, más rapido if-else o switch?

Iniciado por engel lex, 7 Diciembre 2014, 23:35 PM

0 Miembros y 1 Visitante están viendo este tema.

_Enko

#10
Mi humilde opinion es que entre switch y elseif no hay mucha diferencia.
La diferencia real la hace la estructura que se utiliza.

Supongamos este ejemplo
Código (cpp) [Seleccionar]

memoria[i] = 556;
               if(memoria[i]=='1') control = 1;
else if(memoria[i]=='2')control = 2;
else if(memoria[i]=='3')control = 3;
else if(memoria[i]=='4')control = 4;
else if(memoria[i]=='5')control = 5;
else if(memoria[i]=='6')control = 6;
else if(memoria[i]=='7')control = 7;
else if(memoria[i]=='8')control = 8;
else if(memoria[i]=='9')control = 9;
else if(memoria[i]=='0')control = 0;
else control = 0;

El codigo este va hacer 10 comparaciones inutiles para llegar a ejcutar el "else" que es lo que vale.

Entonces a mi criterio la mejor optimizacion que se puede hacer , es poner primero las condiciones que tengan más probabilidad de suceder. De manera que se ejecutén menos comparaciones y se pierda menos el tiempo.

La ventaja de switch-case es que tenemos la posibilidad de utilizar o no el Break  cosa que se pueden agrupar varios casos en un mismo grupo.

Saludos.

engel lex

es un numero bastante aleatorio así que cualquier cosa es probable XD

aunque lo que dice x64Core es cierto, el compilador verá como resuelve su lio allí para que sea rapido (posiblemente hasta vuelve eso una tabla o algo así)
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

x64core

#12
Cita de: _Enko en  9 Diciembre 2014, 20:24 PM
Mi humilde opinion es que entre switch y elseif no hay mucha diferencia.
La diferencia real la hace la estructura que se utiliza.

Supongamos este ejemplo
Código (cpp) [Seleccionar]

memoria[i] = 556;
               if(memoria[i]=='1') control = 1;
else if(memoria[i]=='2')control = 2;
else if(memoria[i]=='3')control = 3;
else if(memoria[i]=='4')control = 4;
else if(memoria[i]=='5')control = 5;
else if(memoria[i]=='6')control = 6;
else if(memoria[i]=='7')control = 7;
else if(memoria[i]=='8')control = 8;
else if(memoria[i]=='9')control = 9;
else if(memoria[i]=='0')control = 0;
else control = 0;

El codigo este va hacer 10 comparaciones inutiles para llegar a ejcutar el "else" que es lo que vale.

Entonces a mi criterio la mejor optimizacion que se puede hacer , es poner primero las condiciones que tengan más probabilidad de suceder. De manera que se ejecutén menos comparaciones y se pierda menos el tiempo.

La ventaja de switch-case es que tenemos la posibilidad de utilizar o no el Break  cosa que se pueden agrupar varios casos en un mismo grupo.

Saludos.
Usando || es posible hacer lo mismo que un switch-case. if(exp || exp || exp).
Además usando switch-case la expresion debe ser constante.

Mod: editado para eliminar citas de mensajes borrados

Eternal Idol

zShackra y x64Core no secuestren hilos para discutir entre ustedes y si TODAVIA tienen cosas que decirse usen los mensajes privados.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

_Enko

EI no!!!!
Estaban a darnos por conocer que la novia de uno está embarazada pero no saben quien es el padre.
cha-chan-cha-chaaaaan!!!!

CitarUsando || es posible hacer lo mismo que un switch-case. if(exp || exp || exp).
Además usando switch-case la expresion debe ser constante.

Cierto, pero lo que quería resaltar, es que la mejor optimización es tratar de hacer en lo posible que las condiciones posibles sean las primeras en aparecer en el bloque de if-case. 
Es decir no hacer 10 "elseif" para que en el 90% de los casos se ejecute el "else".

Saludos.


zShackra

#15
Cita de: _Enko en 10 Diciembre 2014, 15:25 PM
Es decir no hacer 10 "elseif" para que en el 90% de los casos se ejecute el "else".
Saludos.

El asunto es que para pocos if-else, es mejor usar los mismos, para muchas más comprobaciones, un switch-case sería más rápido, porque según entiendo se evitan hacer cmp, y el compilador usualmente crea una tabla de saltos, así va directo a cada jmp, el problema es que se usa un poco más de memoria... pero sería un código más organizado y posiblemente más rápido.