关于内存:C ++中的自动变量

Automatic variables in C++

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
In C++, why should new be used as little as possible?

在C++中自动分配的变量在哪里?在那堆还是那堆?

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

另外,请注意链接,引用关于C++中内存分配的完整说明性文本。


c++does not have the concept of a stack or heap,it is an explementation detail as far as the language is concerned.

据我所说,每一个实现我都知道使用堆栈来管理局部变量的生活。然而,许多局部变量可能会在寄存器内结束整个生命,而不会触及堆栈,一些局部变量可能会被优化为完整的。因为你声明一个自动变量并不意味着它会被放到堆栈上

E.G.

1
2
3
4
5
6
7
int main()
{
    int x = rand();
    int y = 2;
    cout << x << y << endl;
    return 0;
}

在本代码中,随着优化,变量y〔1〕将被最小化,完全和可变x很可能被给出它自己的寄存器。这些变量中的每一个都会出现在堆栈上。


是的,汽车变速器被分配,最常见的是,在堆栈上(The C++Standard doesn't specificy"stack"but it is safe enough to admit that)。

你可以用堆栈来分配动态记忆中的alloca(),但这不是很好的做法,更多的是在这个问题上:为什么不考虑好的做法?


自动(本地)变量不被分配到Heap。他们将住在堆栈或登记处。

是的,所有的堆栈分配都是在编译时间知道的。

你参考的链接实际上是一个很好的资源来描述如何C+handles memory。


在定位寄存器或堆栈中的一些局部变量时,有些编译者可能选择重新使用特定寄存器或存储器,如果可以在编译时间内确定一个物体的可用寿命限制在代码区域。

For example,

ZZU1

编译员会发现,A和B的尺寸相同,但A在B的生活中并不常见。编译器将在同一存储器(堆栈或寄存器)的一个和二个之间绘制地图,以保存空间位。