这是一个经典的问题了,最近看到了一篇好文章1,下面用表格总结一下自己的笔记:
区别栈堆
用处运行程序,LIFO的特点转为运行程序而设计!2存放动态申请的对象存放内容一般所有可以在编译期确定大小的对象/变量3存放真实的对象的内容4申请方式预分配,使用的时候只需要简单移动栈顶指针,快速,但是较少“实时”向操作系统请求分配内存,很慢,但是量多内存释放时机函数或作用域结束Java由GC控制,C++需要程序员管理内存释放方式Last-in-Fisrt-out,只需移动栈顶指针即可!超级快!自由,需真正向OS释放相应的存储,很慢数量一个进程可以有多个线程,每个线程独立一个栈一个进程所有的线程共享一个堆
参考:http://www.cnblogs.com/whgw/archive/2011/09/29/2194997.html ↩想想嵌套作用域、函数调用的过程,就知道为什么了~ ↩但是像JAVA里的字符串常量池就不是啦,具体问题具体分析 ↩这里所谓的真实内容,举个例子,Java里的String str = new String(“hello”);就是先在堆里申请内存方式”hello”,然后栈里存一个指向它的引用str变量而已。 ↩
转载请注明原文地址: https://ju.6miu.com/read-1296344.html