我记得在大学学习8086汇编语言时,做以下操作能够提高性能:
for (int i = 6
由于存在JNS操作,即“如果没有符号就跳转”,使用它意味着每个周期后不需要进行内存查找来获取比较值,也不需要进行比较。如今,大多数编译器都会优化寄存器的使用,因此内存方面已不再重要,但仍会出现不必要的比较。
顺便提一下,在循环中放入7或6会引入“魔法数字”。为了更好的可读性,您应该使用一个具有意图清晰的名称的常量。就像这样:
const int NUMBER_OF_CARS = 7
for (int i = 0
编辑:由于有些人不理解汇编语言的相关知识,因此需要提供一个更完整的示例:
如果我们执行for (i = 0; i <= 10; i++),您需要执行以下操作:
mov esi, 0
loopStartLabel:
; Do some stuff
inc esi
; Note cmp command on next line
cmp esi, 10
jle exitLoopLabel
jmp loopStartLabel
exitLoopLabel:
如果我们使用for (int i = 10; i > -1; i--),那么您可以这样做:
mov esi, 10
loopStartLabel:
; Do some stuff
dec esi
; Note no cmp command on next line
jns exitLoopLabel
jmp loopStartLabel
exitLoopLabel:
我刚刚检查了一下,微软的C++编译器不会进行这种优化,但如果你这样做:
for (int i = 10
因此,如果您使用 Microsoft C++†,并且升序或降序没有区别,要快速循环,您应该使用:
for (int i = 10
而不是这两个中的任何一个:
for (int i = 10
for (int i = 0
坦率地说,让“for (int i = 0; i <= 10; i++)”这段代码易读性更好通常比错过一个处理器命令要重要得多。
†其他编译器可能会有不同的操作。