C ++中的堆栈和堆内存
Stack and heap memory in c++
如果我将变量声明为
int a[100]
据说在堆栈上创建一个包含 100 个元素的数组,根据大小等因素可能不是一个好主意。
考虑我定义一个结构
struct abc
{
int a[100];
};
在代码的某处,我将此结构用作
abc P; //line 1
abc *p = new abc(); //line 2
现在数组在这两个对象中(一个在堆栈上(第 1 行),另一个在堆上(第 2 行))。内部数组位于何处?
谢谢
数据成员的位置取决于包含它的对象的位置。当结构在堆栈上时,它的所有成员都在堆栈上。当结构在堆上时,成员也在堆上。
在第 1 行中,数组在堆栈上。
在第 2 行中,数组在堆上。
该结构被视为一个包含所有内部数组(可能还有一些用于填充和对齐的更多内存)的大变量,并且整个事物位于您所在的位置 - 堆栈或堆。
这就是为什么你可以将结构分配给结构,比如
s1 = s2;
并且所有数组都被复制 - 它被作为一大块数据处理(虽然它是浅拷贝,但数组占用实际内存)。
它与对象在同一个地方,因为当对象在堆上并且内部数组在堆栈上时,数组将被删除,最后得到一个空对象。
如果我将变量声明为
int a[100]
据说在堆栈上创建一个包含 100 个元素的数组,根据大小等因素可能不是一个好主意。
考虑我定义一个结构
struct abc
{
int a[100];
};
在代码的某处,我将此结构用作
abc P; //line 1
abc *p = new abc(); //line 2
现在数组在这两个对象中(一个在堆栈上(第 1 行),另一个在堆上(第 2 行))。内部数组位于何处?
谢谢
数据成员的位置取决于包含它的对象的位置。当结构在堆栈上时,它的所有成员都在堆栈上。当结构在堆上时,成员也在堆上。
在第 1 行中,数组在堆栈上。
在第 2 行中,数组在堆上。
该结构被视为一个包含所有内部数组(可能还有一些用于填充和对齐的更多内存)的大变量,并且整个事物位于您所在的位置 - 堆栈或堆。
这就是为什么你可以将结构分配给结构,比如
s1 = s2;
并且所有数组都被复制 - 它被作为一大块数据处理(虽然它是浅拷贝,但数组占用实际内存)。
它与对象在同一个地方,因为当对象在堆上并且内部数组在堆栈上时,数组将被删除,最后得到一个空对象。