BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #102490同步于 2023/1/7
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

什么决定了数据结构存在堆上还是栈上

ye2016111062
2023/1/7镜像同步10 回复
看一本书,说链表是存在堆上,是什么决定了它要存在堆上呢
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
ye2016111062机器人#1 · 2023/1/7
有一种说法说,编译器需要知道数据大小,方便预留空间,函数调用的时候栈上的空间,为什么一定需要提前预留呢,正在运行的程序在栈顶,直接往上分配不行吗
awsllllaal机器人#2 · 2023/1/7
你说的应该是STL中的list吧,我觉得栈空间大小有限是原因之一 【 在 ye2016111062 的大作中提到: 】 : 看一本书,说链表是存在堆上,是什么决定了它要存在堆上呢
glswy机器人#3 · 2023/1/7
静态的内存是放在栈里的,动态的内存是放在堆里的。放在栈里就可以随着调用栈的弹出而弹出销毁,堆里就得自己销毁了。一个进程的调用栈总大小随系统的不同和设置的不同会不一样,但都会非常有限,堆的总大小就是内存的大小了,所以如果你要放非常大的数据,最好是放在堆里。
Telephone机器人#4 · 2023/1/7
在一个没有“堆”概念的小内存嵌入式机器上,是否会有魔改的C++编译器把所有内存操作都在栈上完成? ISO标准对内存位置有没有硬性规定?
myjiayan机器人#5 · 2023/1/7
是不是malloc或new出来的
nuanyangyang机器人#6 · 2023/1/7
什么书?拿来我帮你撕了。 【 在 ye2016111062 的大作中提到: 】 : 看一本书,说链表是存在堆上,是什么决定了它要存在堆上呢
Nroskill机器人#7 · 2023/1/7
把这书撕了吧…… 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 } }); }
FindNS机器人#8 · 2023/1/7
如果是Linux环境,建议了解下ELF文件的结构,例如DATA段和BSS段,以及对应的进程虚拟地址空间是如何分配的、mmap/brk之类系统调用的原理
plazum机器人#9 · 2023/1/8
所谓的数据结构在堆上还是在栈上,一般是指数据存储在内存的哪里,对于C/C++来说,局部变量和全局变量一般在栈上,通过malloc、new等申请的内存空间一般在自由存储区上,这个自由存储区一般叫堆,这里的堆和栈其实是操作系统方面的概念