为什么我们允许在for循环中骚扰迭代变量

时间:2011-09-17 04:34:56

标签: for-loop

很抱歉这个问题非常普遍,但我一直都在想这个问题。

在for循环中,为什​​么编译器不能根据初始化程序,条件和增量确定它必须运行的次数,然后运行循环预定的次数?

如果我们修改了集合,即使是Java中的高级for和允许我们迭代集合的python中的for也会很有趣。

如果我们确实想要更改迭代变量或我们正在迭代的对象,我们也可以使用while循环而不是for。在这种情况下使用for循环有什么好处吗?

由于没有语言按照我所描述的方式进行for循环,因此必须有很多我没想过的东西。请指出相同的内容。

1 个答案:

答案 0 :(得分:1)

如果它确定了正确的优化,这就是优化编译器可以做的事情。它被称为循环展开,您可以在c编译器中通常使用标志-funroll-loops来鼓励它。主要问题是您在编译时并不总是知道需要多少次迭代,因此编译器必须能够正确处理一般情况。如果编译器可以确定循环迭代次数是不变的并且迭代次数相当小,则可能会输出已展开循环的机器代码。

另一个主要问题是文件大小。如果你知道你必须迭代1,000,000,000次,那么展开那个循环将使你的可执行二进制文件变得非常庞大。