c++ - 在循环内声明变量

标签 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 字节内存(在我的机器上,double 是 8 字节)。这是真的吗,还是编译器足够聪明,知道只有在循环结束时才释放内存?

关键是循环内的变量声明使代码更具可读性(imo)。

最佳答案

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

即使编译器是一个愚蠢的编译器,这也意味着每次迭代最多执行 1 个 ADD 和 1 个 SUB 指令。这在任何情况下都不太可能,因为编译器知道它们是循环的局部变量并且它们不能更改它们的大小。

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

关于c++ - 在循环内声明变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30152342/

相关文章:

c++ - 链表队列在一次调用 dequeue() 后清除整个链

c++ - 读取和修改文件的最佳方式 (c++)

c++ - 由于模板基类,从不完整类型初始化静态 constexpr

c++枚举参数给出标识符错误

C++ 简化构造函数重载

c++ 20范围库,如何使条件运算符工作?

c++ - 虚函数可以通过隐式类型转换实现吗?或者如何进行依赖于子类的类型转换?

C++ Mersenne Twister 和随机数库

c++ - SQLite C/C++ API 无符号字符 *

c++ - 我当前实现的双向链表类是否需要重构迭代器 end() 功能?