2011-09-08 12 views
5

Recuerdo hace años que escuché que es más eficiente tener la reducción de los bucles en lugar de aumentar, especialmente al programar microprocesadores. ¿Es esto cierto y, de ser así, cuáles son las razones?¿Es mejor tener ciclos decrecientes?

+0

Tal vez dependa de la directiva del ensamblador 'LOOP' que reduzca 'ECX' a cero. Pero en lenguajes de alto nivel, esto no debería tener mucho efecto. – Nobody

+0

La etiqueta C# es confusa: su pregunta depende de la arquitectura de la CPU, pero C# está compilada en código IL que puede traducirse en diferentes instrucciones de código de máquina según el conjunto de instrucciones –

+0

Si tiene código real que es más rápido en una dirección que en la otra , publicarlo y preguntar por qué. De lo contrario, esta no es una pregunta terriblemente útil. – Gabe

Respuesta

10

Una cosa que ocurre fuera del bate es que la condición final en un ciclo decreciente es probable que sea más rápida. Si realiza un bucle hasta un valor de cert, se requerirá una comparación con ese valor en cada iteración. Sin embargo, si está girando hacia abajo a cero, entonces el decrecimiento en la mayoría de los procesadores establecerá el indicador de cero si el valor decrementado llega a cero, por lo que no será necesaria una operación de comparación adicional.

Patatas pequeñas me di cuenta, pero en un lazo interno apretado grande podría importar mucho.

+0

esta es de hecho la respuesta –

+0

Si puede publicar algún análisis de tiempo que muestre este efecto, esta pregunta podría valer la pena abrirla nuevamente. – Gabe

+2

@Gabe - Una solicitud extraña. En general, realmente aplaudo su sospecha de micro-optimización como esta. Ciertamente no estoy ofuscando el código HLL mío para hacer esto a menos que tenga números que muestren que ayuda mucho. Sin embargo, el hecho de que (en procesadores como el M68K o Ix86) esto requiere una instrucción adicional está fuera de toda duda. No creo que realmente tenga el tiempo libre requerido para probarle de manera concluyente que ejecutar ninguna instrucción es más rápido que ejecutar una instrucción. –

2

En C# no hace ninguna diferencia a la eficiencia. La única razón para tener ciclos decrecientes es si está recorriendo una colección y eliminando elementos a medida que avanza.

0

No sé acerca de la disminución, pero sé que el uso de ++ i en lugar de i ++ es más eficiente.

Hay muchos artículos en la web sobre por qué esto es, pero todo se reduce a esto: el uso de ++ i lo hace para que me declaren la primera vez de forma automática, y el uso de i ++ no lo hace. (En C# por lo menos)

Una vez más, no sé si decremento es más performante, solo pensé en tirar por ahí que ver cómo se está preguntando sobre el rendimiento :)

Sólo tendría que utilizar decreciente porque es más fácil en algunas situaciones por lo que sé ...

+1

seguramente esto no es cierto –

Cuestiones relacionadas