Ros*_*ers 3 compiler-construction
在编译器中,短语"循环不变代码运动"描述循环中的代码表达式或语句,其不会从迭代变为迭代,因此可以移动到循环之外以进行一次计算.
我理解这句话的"循环不变"部分,但"代码运动"是什么意思?
"代码运动"只是意味着代码被移出循环,因为如果它在循环内部重复执行或在循环外执行一次,它将没有任何区别.编译器正在获取不需要在循环中的代码并将其移出它以进行优化.
这是一个例子:
for ( int x=0; x < string.length(); x++) {
//other code here
}
Run Code Online (Sandbox Code Playgroud)
如果编译器知道循环中没有任何内容改变字符串的长度,它只需将字符串的长度硬编码到程序中,而不是length()在适当的字符串上插入对方法的实际调用,因为方法调用将始终返回相同的结果,只是浪费内存和处理器时间.方法调用的代码在循环之前移动而不是保留在其中.这篇文章称之为'代码运动',虽然我只是称之为普通的优化,因为大多数优化涉及移动代码.:d
| 归档时间: |
|
| 查看次数: |
9007 次 |
| 最近记录: |