完整代码在这里: http: //pastebin.com/MM3vWmqA
在函数 fast_generator 中,我为两个语句添加了注释。如果你切换这些语句,代码运行速度会快 1.8 倍。如果删除第一个语句,代码将比原始版本执行得更快,但与切换它们相比会更慢。
测试用例应该如下。
第一 - 最慢。452 毫秒。
counter++;
i--;
第二 - 比第一个更快。280 毫秒。
i--;
counter++;
第三 - 比第一个快,但比第二个慢。421 毫秒。
i--;
原始语句的汇编器输出是。
inc edx
mov eax, 6
我已经验证,在切换这些语句时,汇编器输出保持不变,这些 asm 指令的唯一区别是互换了。
我已经用 VC++10 和 VC++11 对其进行了测试,行为相同。有人能解释一下为什么切换这些语句会加速算法 ~ 1.8 倍吗?如果您认为 std::clock() 不准确,请更改 size = 7。在我的机器上,size = 7 的差异是 12000 毫秒与 7000 毫秒。