在循环内声明变量

时间:2015-05-10 14:04:45

标签: c++

考虑下一个循环

for(int i = 0; i < 99999999; i++)
{
    double d1 = (double)i/10;
    double d2 = (double)i/100;

    std::cout << d1 * d2 << std::endl;
}

据我所知,应用程序将在循环中为堆栈中的每次迭代分配并释放16个字节的内存(在我的机器上为2个字节)。这是真的,还是编译器足够聪明,只有在循环结束时才知道释放内存?

问题在于循环中的变量声明使代码更具可读性(imo)。

1 个答案:

答案 0 :(得分:3)

堆栈分配只不过是增加和减少寄存器的值。

即使编译器很笨,这意味着每次迭代最多执行1条ADD和1条SUB指令。在任何情况下都不太可能,因为编译器知道它们是循环的本地人,并且他们无法改变它们的大小。

实际上它们也可能根本不会停留在堆栈上,因为它们可以适合整个循环的两个浮点寄存器。