堆和栈的区别

来源:互联网 发布:ubuntu命令行界面 编辑:程序博客网 时间:2024/06/16 20:24

这是一个经典的问题了,最近看到了一篇好文章1,下面用表格总结一下自己的笔记:

区别 栈 堆 用处 运行程序,LIFO的特点转为运行程序而设计!2 存放动态申请的对象 存放内容 一般所有可以在编译期确定大小的对象/变量3 存放真实的对象的内容4 申请方式 预分配,使用的时候只需要简单移动栈顶指针,快速,但是较少 “实时”向操作系统请求分配内存,很慢,但是量多 内存释放时机 函数或作用域结束 Java由GC控制,C++需要程序员管理 内存释放方式 Last-in-Fisrt-out,只需移动栈顶指针即可!超级快! 自由,需真正向OS释放相应的存储,很慢 数量 一个进程可以有多个线程,每个线程独立一个栈 一个进程所有的线程共享一个堆

  1. 参考:http://www.cnblogs.com/whgw/archive/2011/09/29/2194997.html ↩
  2. 想想嵌套作用域、函数调用的过程,就知道为什么了~ ↩
  3. 但是像JAVA里的字符串常量池就不是啦,具体问题具体分析 ↩
  4. 这里所谓的真实内容,举个例子,Java里的String str = new String(“hello”);就是先在堆里申请内存方式”hello”,然后栈里存一个指向它的引用str变量而已。 ↩
1 0
原创粉丝点击