elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  PoC, más rapido if-else o switch?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: PoC, más rapido if-else o switch?  (Leído 6,618 veces)
_Enko


Desconectado Desconectado

Mensajes: 538



Ver Perfil WWW
Re: PoC, más rapido if-else o switch?
« Respuesta #10 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
  1. memoria[i] = 556;
  2.                if(memoria[i]=='1') control = 1;
  3. else if(memoria[i]=='2')control = 2;
  4. else if(memoria[i]=='3')control = 3;
  5. else if(memoria[i]=='4')control = 4;
  6. else if(memoria[i]=='5')control = 5;
  7. else if(memoria[i]=='6')control = 6;
  8. else if(memoria[i]=='7')control = 7;
  9. else if(memoria[i]=='8')control = 8;
  10. else if(memoria[i]=='9')control = 9;
  11. else if(memoria[i]=='0')control = 0;
  12. else control = 0;
  13.  
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.


« Última modificación: 9 Diciembre 2014, 20:36 pm por _Enko » En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: PoC, más rapido if-else o switch?
« Respuesta #11 en: 9 Diciembre 2014, 20:35 pm »

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í)


En línea

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


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: PoC, más rapido if-else o switch?
« Respuesta #12 en: 10 Diciembre 2014, 02:37 am »

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
  1. memoria[i] = 556;
  2.                if(memoria[i]=='1') control = 1;
  3. else if(memoria[i]=='2')control = 2;
  4. else if(memoria[i]=='3')control = 3;
  5. else if(memoria[i]=='4')control = 4;
  6. else if(memoria[i]=='5')control = 5;
  7. else if(memoria[i]=='6')control = 6;
  8. else if(memoria[i]=='7')control = 7;
  9. else if(memoria[i]=='8')control = 8;
  10. else if(memoria[i]=='9')control = 9;
  11. else if(memoria[i]=='0')control = 0;
  12. else control = 0;
  13.  
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
« Última modificación: 10 Diciembre 2014, 16:30 pm por Carloswaldo » En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.935


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: PoC, más rapido if-else o switch?
« Respuesta #13 en: 10 Diciembre 2014, 09:09 am »

zShackra y x64Core no secuestren hilos para discutir entre ustedes y si TODAVIA tienen cosas que decirse usen los mensajes privados.
En línea

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


Desconectado Desconectado

Mensajes: 538



Ver Perfil WWW
Re: PoC, más rapido if-else o switch?
« Respuesta #14 en: 10 Diciembre 2014, 15:25 pm »

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!!!!

Citar
Usando || 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.
 
En línea

zShackra

Desconectado Desconectado

Mensajes: 59


Ver Perfil WWW
Re: PoC, más rapido if-else o switch?
« Respuesta #15 en: 10 Diciembre 2014, 16:30 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.
« Última modificación: 10 Diciembre 2014, 16:56 pm por Eternal Idol » En línea

Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Busco wondows rapido (que funcione rapido)
Windows
makitos 1 2,825 Último mensaje 11 Octubre 2010, 21:08 pm
por Randomize
If o Switch? « 1 2 3 »
Programación C/C++
OmarHack 20 7,713 Último mensaje 15 Junio 2013, 20:54 pm
por OmarHack
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines