如果我将变量声明为
int a[100]
据说这是一个在堆栈上创建了100个元素的数组,根据大小等原因可能是一个坏主意。
考虑我定义一个结构
struct abc
{
int a[100];
};
在代码中的某处我将此结构用作
abc P; //line 1
abc *p = new abc(); //line 2
现在数组在这两个对象中(一个在堆栈上(第1行),另一个在堆上(第2行))。内部阵列在哪里?
由于
答案 0 :(得分:4)
数据成员的位置取决于包含它的对象的位置。当结构在堆栈上时,其所有成员都在堆栈上。当结构在堆上时,成员也是如此。
答案 1 :(得分:0)
在第1行中,数组位于堆栈中。
在第2行,数组在堆上。
结构体被视为一个包含所有内部数组的大变量(可能还有一些内存用于填充和对齐),整个事物驻留在你的位置 - 堆栈或堆栈。
这就是为什么你可以为struct分配struct,比如
Stream.Read
并且所有数组都被复制 - 它被作为一大块数据处理(尽管它是一个浅层副本,数组占用了实际内存)。
答案 2 :(得分:0)
它与对象位于同一个位置,因为当对象在堆上并且内部数组将在堆栈上时,数组将被删除,并且最终会得到一个空对象。