A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© goldboy 中级黑马   /  2015-6-15 11:45  /  1193 人查看  /  17 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

看到内存管理,堆和栈有啥不同?知道栈是先进先出,那堆呢?求高手指教

17 个回复

倒序浏览
堆和栈的区别主要从三个方面考
1 空间分配
  栈:由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈;
  堆: 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。

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

3数据结构
   堆:堆可以被看成是一棵树,如 堆排序
   栈:一种先进后出的数据结构。
回复 使用道具 举报 1 0
楼上讲的非常好,一般我们一般编程中需要理解的是第一点内存空间分配的知识
第三点也是非常重要的,但跟第一点的堆栈不是同一个概念,是数据结构的知识,不懂可以回去翻大学课本
回复 使用道具 举报
goldboy 来自手机 中级黑马 2015-6-15 14:28:55
板凳
2楼说的比较全,非常感谢,也就是说栈用完就自动释放,堆用完要自己释放,自己不释放系统一会定时释放。
回复 使用道具 举报
goldboy 来自手机 中级黑马 2015-6-15 14:30:57
报纸
栈一般存放函数形参以及局部变量,那堆一般存放哪些呢?
回复 使用道具 举报
堆,对象。栈,局部变量
回复 使用道具 举报
围观学习,非常感谢
回复 使用道具 举报
学习了~
回复 使用道具 举报
栈里面存的是临时变量和局部变量,堆里面存放的是程序运行过程中动态分配的存储空间,栈里面存放数据是从高到低,内存寻址也是从高到低

点评

非常感谢,内存中的栈堆与数据结构中的栈堆是两个不同的概念。  发表于 2015-6-17 21:20
回复 使用道具 举报
栈是先进后出,存放局部变量或临时变量,堆动态分配对象的空间,内存管理的都是堆内的oc对象。

点评

非常感谢,互相学习  发表于 2015-6-18 20:59
回复 使用道具 举报
栈好像是个临时存储的,代码块结束也就结束了
回复 使用道具 举报
堆是内存中的一块存储空间  动态分配时  使用这上面的空间

点评

非常感谢  发表于 2015-6-18 22:48
回复 使用道具 举报
学习学习!

点评

互相学习  发表于 2015-6-19 10:07
回复 使用道具 举报
堆里面放的时对象,而栈里面一般放的时局部变量,堆是先进后出
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马