考虑以下两个循环,其中N = 10 ^ 9或足够大的东西以注意效率低下. Loop x = 1 to N total += A(x) total += B(x) 要么 Loop x = 1 to N total += A(x)Loop x=1 to N total += B(x) 在每个函数取x的情况下,执行一些任意
Loop x = 1 to N total += A(x) total += B(x)
要么
Loop x = 1 to N total += A(x) Loop x=1 to N total += B(x)
在每个函数取x的情况下,执行一些任意的算术运算(例如x ^ 2和3x ^ 3或其他东西,无关紧要),并返回一个值.
整体运行时间是否会有任何差异,何时不是这种情况,如果有的话?
每个循环需要四个动作:>准备(每个循环一次)
>检查停止条件(每次迭代一次)
>执行循环体(每次迭代一次)
>调整用于确定迭代是否应该继续的值(每次迭代一次)
当你有一个循环时,你只需要为第1,2和4项“支付”一次;当你有两个循环时,你会为所有东西“支付”两次.
假设调用这两个函数的顺序并不重要,那么在大多数常见情况下差异不会很明显.但是,在非常紧凑的循环非常罕见的情况下,单个循环将占用较少的CPU资源.实际上,loop unwinding的常用技术依赖于在循环期间通过多次重复主体来减少每次迭代检查和设置操作在总体CPU负载中的份额,并通过相应的因子减少迭代次数.