C++中的自动变量

Nit*_*arg 8 c++ memory heap stack automatic-properties

可能重复:
在C++中,为什么要new尽量少用?

在C++中分配的自动变量在哪里?在堆栈或堆上?

另外,我在7.9中读到- 堆栈和堆,堆栈上分配的所有内存在编译时都是已知的.这是真的吗?这是否意味着堆栈上只发生静态内存分配?

另外,请提及链接,参考C++中有关内存分配的完整说明文字.

Pet*_*der 17

C++没有堆栈或堆的概念,就语言而言,它是一个实现细节.

话虽这么说,我所知道的每个实现都使用堆栈来管理局部变量的生命周期.但是,许多局部变量可能最终完全位于寄存器内,并且从不触及堆栈,并且可能会完全优化一些局部变量.仅仅因为你声明一个自动变量并不意味着它将被放在堆栈上.

例如

int main()
{
    int x = rand();
    int y = 2;
    cout << x << y << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在此代码中,通过优化,变量y几乎肯定会被完全删除,变量x可能会被赋予自己的寄存器.这些变量中的任何一个都不可能存在于堆栈中.

  • 说得好。我讨厌“标准”警察跳进去,只是停下来,引用圣标引述。很好的例子。 (2认同)