繁体   English   中英

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;

并且所有数组都被复制 - 它被作为一大块数据处理(虽然它是一个浅拷贝,但数组占用了实际内存)。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM