Recuerdo de mis días cuando hicimos la Asamblea 8086 en la universidad, fue más eficiente:
for (int i = 6; i > -1; i--)
ya que hubo una operación JNS que significa Saltar si no hay señal. Usar esto significaba que no había búsqueda de memoria después de cada ciclo para obtener el valor de comparación y tampoco comparar. En la actualidad, la mayoría de los compiladores optimizan el uso del registro, por lo que la memoria ya no es importante, pero aún así obtiene una comparación no requerida.
Por cierto, poner 7 o 6 en tu ciclo es introducir un " número mágico ". Para una mejor legibilidad, debe usar una constante con un nombre revelador de intención. Me gusta esto:
const int NUMBER_OF_CARS = 7;
for (int i = 0; i < NUMBER_OF_CARS; i++)
EDITAR: La gente no está entendiendo el montaje, por lo que obviamente se requiere un ejemplo más completo:
Si lo hacemos para (i = 0; i <= 10; i ++) debe hacer esto:
mov esi, 0
loopStartLabel:
; Do some stuff
inc esi
; Note cmp command on next line
cmp esi, 10
jle exitLoopLabel
jmp loopStartLabel
exitLoopLabel:
Si lo hacemos para (int i = 10; i> -1; i--), entonces puede salirse con la suya:
mov esi, 10
loopStartLabel:
; Do some stuff
dec esi
; Note no cmp command on next line
jns exitLoopLabel
jmp loopStartLabel
exitLoopLabel:
Acabo de comprobar y el compilador de C ++ de Microsoft no hace esta optimización, pero lo hace si usted lo hace:
for (int i = 10; i >= 0; i--)
Entonces, la moraleja es que si está utilizando Microsoft C ++ †, y ascendente o descendente no hace ninguna diferencia, para obtener un bucle rápido debe usar:
for (int i = 10; i >= 0; i--)
en lugar de cualquiera de estos:
for (int i = 10; i > -1; i--)
for (int i = 0; i <= 10; i++)
Pero, francamente, obtener la legibilidad de "for (int i = 0; i <= 10; i ++)" es normalmente mucho más importante que perder un comando de procesador.
† Otros compiladores pueden hacer cosas diferentes.