C/Visual C - Que es mejor

 
Vista:

Que es mejor

Publicado por Oscar (20 intervenciones) el 01/03/2006 14:18:47
hola

tengo un loop en el cual la velocidad es vital, necesito saber si si entra o no a una condicion dentro del loop, asi:

bool myEntra = false
while (...){
if ( ...){
myEntra = true;
}
}

pero como el loop es extenso y la probabilidad de que entre en el if es grande, se estuviera asignando valor a la variabel multiple veces, sera mejor hacer asi?

bool myEntra = false
while (...){
if ( ...){
if ( !myEntra ) myEntra = true;
}
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

RE:Que es mejor

Publicado por chuidiang (73 intervenciones) el 01/03/2006 23:15:38
Hola:

No puedo asegurarte nada, pero imagino que en ensamblador posiblemente se pierda más tiempo (o como mínimo el mismo) en hacer el !myEntra y luego saltar que en simplemente hacer myEntra=true.

De todas formas, sí solo hay eso en el bucle, lo mejor es hacer un break una vez que se cumpla la condición. De esta forma sabrás que se cumple y te saltarás el resto del bucle

bool myEntra=false;
while(...){
if (...) {
myEntra=true;
break; // esto se sale del while
}
}

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Que es mejor

Publicado por Carlos (6 intervenciones) el 03/03/2006 03:23:09
Hay un manera de que el programa se ejecute mas rapido

Declara la variable de tipo "register" asi:

register bool myEntra = false;

para que el programa guarde la variable en un registro de la CPU y no en la memoria y de esta manera se tendria un acceso más rapido a dicha variable aumentando la ejecucion del programa

bye
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Que es mejor

Publicado por fernando.gomez (1603 intervenciones) el 03/03/2006 05:42:15
Como Carlos te dijo, declarándola como register es más rápido, porque un register se guarda en el registro, no en la memoria RAM (eso de registro es un concepto de ensamblador) y no se pierde tiempo buscando la dirección en memoria. Claro que lo que ahorrarás es muy poco.

Otra forma de ahorrarte un paso es asignando directamente la variable booleana. Por ejemplo, tu código:

bool myEntra=false;
while(...){
if (...) { // paso 1: evaluación del IF
myEntra=true; // paso 2: asignación de la variable
break; // esto se sale del while
}
}

toma 2 pasos, los cuáles marqué. Lo puedes hacer en un paso así:

bool myEntra=false;
while(!myEntra){
myEntra=<<expresión que iba dentro del if>> // sale del while
}

por ejemplo, si dentro del if tenías:

bool myEntra=false;
while(...){
if (x == 1) {
myEntra=true;
break; // esto se sale del while
}
}

lo cambias a
bool myEntra=false;
while(!myEntra){
myEntra = x == 1;
}

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar