我综合了几个搜索结果,接下来以图表和高度概括性的语言来总结一下堆和栈的区别,文末我会贴上一篇十分通俗的讲解文章,想要深刻理解的读者可以对照着我的几条理解找到两篇文章所述之间的对应关系,对于理解堆和栈的区别更有效果。
堆,是一种持久的全局变量,手动申请,手动释放,容易产生内存碎片。且方向为自底向上
栈,是一种临时的局部变量,自动申请,自动释放,且方向为自顶向下
解释:
此处的手动和自动其实是主语不同,手动是指程序员通过程序申请,自动是指操作系统自动完成分配过程,只要定义了变量,操作系统就会自动为变量分配空间,申请理解为分配过程中的步骤,因此作用范围不同,堆是在整个文件内受用的,而栈只是服务于变量,临时的也不难理解,作用范围小嘛;产生内存碎片的话可以理解为程序员对于空间分配的度没有操作系统那么精准,可能有剩余,我是这么理解的;方向的话就记忆即可,栈自顶向下,先进后出,堆与之相反,这个可以参考我文章末尾放的链接那篇。
以上内容是我自己的理解,下面附上更加直观的图表以供大家理解。图表中没有方向的区别
更加通俗讲解版本: https://www.zhihu.com/question/19729973/answer/377735103
如果觉得我总结的还不错,请不要吝啬你的赞美,小冯会继续加油的!