黑马程序员技术交流社区

标题: 堆和栈有啥不同 [打印本页]

作者: goldboy    时间: 2015-6-15 11:45
标题: 堆和栈有啥不同
看到内存管理,堆和栈有啥不同?知道栈是先进先出,那堆呢?求高手指教
作者: venn    时间: 2015-6-15 12:50
堆和栈的区别主要从三个方面考
1 空间分配
  栈:由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈;
  堆: 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。

2 缓存方式
    栈:使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放;
 堆:是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些

3数据结构
   堆:堆可以被看成是一棵树,如 堆排序
   栈:一种先进后出的数据结构。
作者: nsswift    时间: 2015-6-15 13:15
楼上讲的非常好,一般我们一般编程中需要理解的是第一点内存空间分配的知识
第三点也是非常重要的,但跟第一点的堆栈不是同一个概念,是数据结构的知识,不懂可以回去翻大学课本
作者: goldboy    时间: 2015-6-15 14:28
2楼说的比较全,非常感谢,也就是说栈用完就自动释放,堆用完要自己释放,自己不释放系统一会定时释放。
作者: goldboy    时间: 2015-6-15 14:30
栈一般存放函数形参以及局部变量,那堆一般存放哪些呢?
作者: 马贺飞    时间: 2015-6-16 22:46
堆,对象。栈,局部变量
作者: 小龙女的萝卜    时间: 2015-6-17 18:52
围观学习,非常感谢

作者: aludiba    时间: 2015-6-17 20:39
学习了~
作者: xiongmaoren518    时间: 2015-6-17 20:54
栈里面存的是临时变量和局部变量,堆里面存放的是程序运行过程中动态分配的存储空间,栈里面存放数据是从高到低,内存寻址也是从高到低
作者: su199325    时间: 2015-6-18 20:22
栈是先进后出,存放局部变量或临时变量,堆动态分配对象的空间,内存管理的都是堆内的oc对象。
作者: 张国繁    时间: 2015-6-18 21:52
栈好像是个临时存储的,代码块结束也就结束了
作者: chaoyueshan    时间: 2015-6-18 22:45
堆是内存中的一块存储空间  动态分配时  使用这上面的空间
作者: chensc    时间: 2015-6-19 05:52
学习学习!
作者: pp584995727    时间: 2015-6-22 22:44
堆里面放的时对象,而栈里面一般放的时局部变量,堆是先进后出




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2