对象是否存储在堆栈中?

时间:2012-02-07 21:27:07

标签: c++

由于对象是通过隐藏函数构造的,而不是基本类型,因此它在C ++中为性能提供了完美意义的范围变量,而在C99中却没有。

我的问题是:存储在堆栈中的对象无论如何

3 个答案:

答案 0 :(得分:3)

在标准C ++中,没有堆栈这样的东西。该标准仅区分对象的不同生命周期。在这种情况下,声称为T t;的变量被认为具有自动存储持续时间,这意味着它的生命周期以其周围范围的结束结束。大多数(所有?)编译器通过堆栈实现这一点。合理的假设是,以这种方式创建的所有对象实际上都存在于堆栈中。

答案 1 :(得分:2)

Automatically allocated [local]对象位于自动内存区域[" stack"],而dynamically allocated对象位于动态内存区域[" heap" ]。

根据经验:在C ++中,任何未使用newmalloc的内容都会自动分配。

编辑:请注意,我使用" stack"和"堆"由于标准[AFAIK]未指定在这些区域中如何管理数据,因此使用双引号,但[再次AFAIK],编译器确实倾向于使用堆栈用于动态区域的自动区域和堆。

答案 2 :(得分:0)

不知道你在第一句话中的意思,但是:是的,局部变量中的对象通常存储在堆栈中。