c++中的堆栈和堆内存

Stack and heap memory in c++

本文关键字:内存 堆栈 c++      更新时间:2023-10-16

如果我声明一个变量为

 int a[100]

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

考虑我定义了一个结构

 struct abc
 {
    int a[100];
 };

,在代码中我使用这个结构作为

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

现在数组位于这两个对象(一个在堆栈上(第1行),一个在堆上(第2行))中。内部数组驻留在哪里?

谢谢

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

第一行数组在堆栈上

在第2行中,数组位于堆上。

结构体被视为一个包含所有内部数组的大变量(可能还有一些用于填充和对齐的内存),整个东西驻留在你取出它的地方——堆栈或堆。

这就是为什么你可以将struct赋值给struct,比如

s1 = s2;

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

它和对象在同一个地方,因为当对象在堆上而内部数组在堆栈上时,数组将被删除,最终得到一个空对象