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行))中。内部数组驻留在哪里?
谢谢
数据成员的位置取决于包含它的对象的位置。当结构体在堆栈上时,它的所有成员都在堆栈上。
第一行数组在堆栈上
在第2行中,数组位于堆上。
结构体被视为一个包含所有内部数组的大变量(可能还有一些用于填充和对齐的内存),整个东西驻留在你取出它的地方——堆栈或堆。
这就是为什么你可以将struct赋值给struct,比如
s1 = s2;
和所有数组被复制-它被作为一个大数据块处理(尽管它是一个浅复制,数组占用实际内存)。
它和对象在同一个地方,因为当对象在堆上而内部数组在堆栈上时,数组将被删除,最终得到一个空对象
相关文章:
- 为什么调用堆栈数组会导致内存泄漏
- 为什么堆栈和堆在内存中分离得如此之多?
- c++ 动态内存 堆栈中的分配
- 巨大的内存分配:堆栈与堆
- 我的堆栈弹出式磁带的实现是否泄漏内存?
- 使用一个内存集数组和单个堆栈在 O(n) 中查找数组的下一个更大元素
- 唯一指针是否在堆或堆栈上分配内存?
- 清除在 main() 中分配的堆栈内存?
- 如何以编程方式区分在内存的堆和堆栈部分创建的对象
- 其他线程堆栈上的可用内存无效
- 在函数中实例化的 STL 对象正在占用堆栈或堆上的内存?
- C++堆栈内存管理问题
- 为什么在编译时需要知道对象的内存配置文件以进行堆栈放置?
- 如果没有指针,如何识别堆栈上的内存?
- 为什么不能在 Visual C++ 中动态分配堆栈内存?但海湾合作委员会可以做到
- 为什么分配堆内存比分配堆栈记忆更快
- 双精度为“无符号长长”会导致内存(堆栈?)损坏
- C++内存堆栈/寄存器范围
- 堆栈内存/堆栈
- 指向地址和内存堆栈的指针