c ++中的堆栈和堆内存

时间:2016-08-12 13:50:31

标签: c++ pointers stack heap

如果我将变量声明为

 int a[100]

据说这是一个在堆栈上创建了100个元素的数组,根据大小等原因可能是一个坏主意。

考虑我定义一个结构

 struct abc
 {
    int a[100];
 };

在代码中的某处我将此结构用作

 abc P; //line 1
 abc *p = new abc(); //line 2

现在数组在这两个对象中(一个在堆栈上(第1行),另一个在堆上(第2行))。内部阵列在哪里?

由于

3 个答案:

答案 0 :(得分:4)

数据成员的位置取决于包含它的对象的位置。当结构在堆栈上时,其所有成员都在堆栈上。当结构在堆上时,成员也是如此。

答案 1 :(得分:0)

在第1行中,数组位于堆栈中。

在第2行,数组在堆上。

结构体被视为一个包含所有内部数组的大变量(可能还有一些内存用于填充和对齐),整个事物驻留在你的位置 - 堆栈或堆栈。

这就是为什么你可以为struct分配struct,比如

Stream.Read

并且所有数组都被复制 - 它被作为一大块数据处理(尽管它是一个浅层副本,数组占用了实际内存)。

答案 2 :(得分:0)

它与对象位于同一个位置,因为当对象在堆上并且内部数组将在堆栈上时,数组将被删除,并且最终会得到一个空对象。