为什么要有堆区和栈区呢?

如果局部变量放堆区,不用时就free掉,似乎也没什么问题啊
关注者
170
被浏览
61,996

13 个回答

因为结构化语言里函数(子程序)调用最方便的实现方式就是用栈,以至于现在绝大部分芯片都对栈提供芯片级的硬件支持,一条指令即可搞定栈的pop操作。栈的好处是:方便、快、有效避免内存碎片化。栈的问题是:不利于管理大内存(尤其在16位和32位时代)、数据的生命周期难于控制(栈内的有效数据通常是连续存储的,所以pop时后申请的内存必须早于先申请的内存失效),所以栈不利于动态地管理并且有效地利用宝贵的内存资源。于是我们有了堆。。。

觉得堆和栈没区别是因为觉得他们的分配和回收没什么区别,但实际上不是这样的。栈只要上下移动esp就可以实现内存的分配和回收。堆就不行了,需要一套分配策略,要防止出现大量小碎片。为了加快分配速度可能还会有快表。回收的时候也会根据大小回收至不同节点方便分配。具体细节我也不清楚:( 不过比起栈来肯定要复杂得多。