考虑下一个循环
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)。
答案 0 :(得分:3)
堆栈分配只不过是增加和减少寄存器的值。
即使编译器很笨,这意味着每次迭代最多执行1条ADD和1条SUB指令。在任何情况下都不太可能,因为编译器知道它们是循环的本地人,并且他们无法改变它们的大小。
实际上它们也可能根本不会停留在堆栈上,因为它们可以适合整个循环的两个浮点寄存器。