Answers:
这是循环不变的代码运动。一个好的编译器应该自己完成。
... 循环不变的代码由语句或表达式(使用命令式编程语言)组成,这些语句或表达式可以移到循环主体之外,而不会影响程序的语义。循环不变的代码运动(也称为提升或标量提升)是编译器优化,可以自动执行此运动。
如果考虑以下代码示例,则可以轻松应用两个优化。
for (int i = 0; i < n; i++) { x = y + z; a[i] = 6 * i + x * x; }
计算
x = y + z
和x * x
可以移到循环外,因为它们在循环内是不变的 -它们在循环的迭代中不会改变-因此优化的代码将如下所示:x = y + z; t1 = x * x; for (int i = 0; i < n; i++) { a[i] = 6 * i + t1; }
该代码可以进一步优化...