如果一个循环被 N 展开,将主体复制 N 次并将行程计数减少 N 倍,则在循环之后您可能需要 0 到 N-1 次“最终迭代”——如果您的原件会发生非零情况trip-count 不是 N 的倍数。
这些最终迭代称为什么?
例如,以下循环:
int sum = 0;
for (int i = 0; i < max; i++) {
sum += i;
}
可以展开 4 倍,如下所示:
int sum = 0;
for (int i = 0; i + 3 < max; i += 4) {
sum += i;
sum += i + 1;
sum += i + 2;
sum += i + 3;
}
// "final iterations" handling here
...作者可能会将整个正文简化为sum += i *4 + 6
1。您还需要一些“最终迭代”处理,这可能与原始循环一样简单:
// handle the final 0 to 3 iterations
for (; i < max; i++) {
sum += i;
}
1事实上,编译器可能会在简化原始循环方面做得更好,通常将其完全删除并通过基于求和公式的乘法直接计算最终结果。毕竟,这只是一个例子。