Ricordo dai miei giorni quando facevamo l'Assemblea 8086 al college, era più performante fare:
for (int i = 6; i > -1; i--)
poiché c'era un'operazione JNS che significa Salta se nessun segno. L'uso di questo significava che dopo ogni ciclo non vi era alcuna ricerca di memoria per ottenere il valore di confronto e neppure un confronto. Oggigiorno la maggior parte dei compilatori ottimizza l'utilizzo dei registri, quindi la memoria non è più importante, ma si ottiene comunque un confronto non necessario.
A proposito, mettere 7 o 6 nel tuo ciclo sta introducendo un " numero magico ". Per una migliore leggibilità dovresti usare una costante con un Nome rivelatore di intenti. Come questo:
const int NUMBER_OF_CARS = 7;
for (int i = 0; i < NUMBER_OF_CARS; i++)
EDIT: le persone non ottengono il montaggio, quindi è ovviamente necessario un esempio più completo:
Se lo facciamo per (i = 0; i <= 10; i ++) devi farlo:
mov esi, 0
loopStartLabel:
; Do some stuff
inc esi
; Note cmp command on next line
cmp esi, 10
jle exitLoopLabel
jmp loopStartLabel
exitLoopLabel:
Se lo facciamo per (int i = 10; i> -1; i--) allora puoi cavartela con questo:
mov esi, 10
loopStartLabel:
; Do some stuff
dec esi
; Note no cmp command on next line
jns exitLoopLabel
jmp loopStartLabel
exitLoopLabel:
Ho appena controllato e il compilatore C ++ di Microsoft non esegue questa ottimizzazione, ma lo fa se lo fai:
for (int i = 10; i >= 0; i--)
Quindi la morale è se stai usando Microsoft C ++ †, e crescente o decrescente non fa alcuna differenza, per ottenere un ciclo rapido dovresti usare:
for (int i = 10; i >= 0; i--)
piuttosto che uno di questi:
for (int i = 10; i > -1; i--)
for (int i = 0; i <= 10; i++)
Ma ottenere francamente la leggibilità di "for (int i = 0; i <= 10; i ++)" è normalmente molto più importante della mancanza di un comando del processore.
† Altri compilatori possono fare cose diverse.