1. 物理上
多数情况下,堆内存是操作系统抽象的,而栈由CPU直接提供支持。从硬件上,堆和栈都是内存条上若干存储单元,并没有什么不同。 但是很多CPU对压栈出栈有指令上的支持,所以栈区分配/归还内存速度极快(相比之下,堆极慢)。尤其在局部变量上,可以轻易地与函数调用/返回绑定(作用域),因此几乎所有编译语言都利用栈来管理局部变量。不仅如此,由于栈内存分配回收机制,使得同意函数内部的“局部变量”总是分配在一段连续的内存空间上;引用这些局部变量就不太容易出现CPU缓存失效的问题。
要点
:物理上相同,堆是系统抽象的。但是栈内存快:①有CPU指令上的支持,②CPU缓存使得访问局部变量变快。
2. 其它区别
内存区域不同:堆内存允许动态申请内存空间。栈内存定义一些基本类型扽变量和对象的引用。
特点不同:堆内存是优先队列的一种数据结构,满足先进后出的性质,栈内存存取速度仅次于寄存器,
栈数据可以共享
。
范围不同:堆内存需要手动进行适当,如果不释放,会出现内存溢出的问题。栈内存会随着变量的作用域分配和释放。
参考:
https://zhidao.baidu.com/question/1175180858536253379.html
https://www.zhihu.com/question/40129725
版权声明:本文为nianmaodu原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。