0
考虑下一个循环一个循环内声明的变量
for(int i = 0; i < 99999999; i++)
{
double d1 = (double)i/10;
double d2 = (double)i/100;
std::cout << d1 * d2 << std::endl;
}
据我所知,应用程序将分配和堆栈上的免费16个字节的内存(双是8个字节我的机器上),每次迭代在循环中。这是真的,还是编译器足够聪明,知道只有在循环结束时才释放内存?
问题是循环内部的变量声明使代码更具可读性(imo)。
我想这够聪明。 – Maroun
你意识到在堆栈上“分配”内存只是移动CPU的堆栈指针,对吧?但是,是的,编译器几乎可以肯定地为整个事情执行一次堆栈调整,而不是每次迭代。检查汇编器输出是否确定。 –
您可以添加静态。这将保证他们将被分配一次。 –