考虑下一个循环
for(int i = 0; i < 99999999; i++)
{
double d1 = (double)i/10;
double d2 = (double)i/100;
std::cout << d1 * d2 << std::endl;
}
据我所知,应用程序将为循环中的每次迭代分配和释放堆栈上的 16 字节内存(在我的机器上,double 是 8 字节)。这是真的吗,还是编译器足够聪明,知道只有在循环结束时才释放内存?
关键是循环内的变量声明使代码更具可读性(imo)。
最佳答案
堆栈分配只不过是增加和减少寄存器的值。
即使编译器是一个愚蠢的编译器,这也意味着每次迭代最多执行 1 个 ADD 和 1 个 SUB 指令。这在任何情况下都不太可能,因为编译器知道它们是循环的局部变量并且它们不能更改它们的大小。
实际上它们也根本不能留在堆栈上,因为它们可以适合整个循环的两个浮点寄存器。
关于c++ - 在循环内声明变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30152342/