返回信息流看一本书,说链表是存在堆上,是什么决定了它要存在堆上呢
这是一条镜像帖。来源:北邮人论坛 / cpp / #102490同步于 2023/1/7
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
什么决定了数据结构存在堆上还是栈上
ye2016111062
2023/1/7镜像同步10 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
有一种说法说,编译器需要知道数据大小,方便预留空间,函数调用的时候栈上的空间,为什么一定需要提前预留呢,正在运行的程序在栈顶,直接往上分配不行吗
你说的应该是STL中的list吧,我觉得栈空间大小有限是原因之一
【 在 ye2016111062 的大作中提到: 】
: 看一本书,说链表是存在堆上,是什么决定了它要存在堆上呢
静态的内存是放在栈里的,动态的内存是放在堆里的。放在栈里就可以随着调用栈的弹出而弹出销毁,堆里就得自己销毁了。一个进程的调用栈总大小随系统的不同和设置的不同会不一样,但都会非常有限,堆的总大小就是内存的大小了,所以如果你要放非常大的数据,最好是放在堆里。
把这书撕了吧……
static List global_list;
for (auto i = 0; i < 10; ++i) {
auto t = std::thread([](){
Node xx;
global_list.push(xx);
while (!is_exit) {
// do something
}
});
}
所谓的数据结构在堆上还是在栈上,一般是指数据存储在内存的哪里,对于C/C++来说,局部变量和全局变量一般在栈上,通过malloc、new等申请的内存空间一般在自由存储区上,这个自由存储区一般叫堆,这里的堆和栈其实是操作系统方面的概念