一、Stack与Heap的区别:
- 申请和回收的方式不同:
- Stack(栈)是系统自动分配内存空间的,而Heap(堆)是我们根据自己的需求实时申请的,由于栈是系统自动分配回收的,所以其生存周期只在函数运行过程中,运行后就释放掉,不能再次被访问到;而堆则需要手动释放,否则就可以一直访问。
- 申请效率:
- 堆:是由new分配的内存,一般速度比较慢,易产生碎片,但是用起来方便;
- 栈:由系统自动分配,速度较快;
- 申请大小限制:
- 在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存的区域,如果申请的空间超过栈的剩余空间时,将提示overflow。因此,能从栈获得的空间较小。;
- 堆是向高地址扩展的数据结构,是不连续的内存区域。这是由于系统是用链表来存储的空闲内存地址的,自然是不连续的,而链表的遍历方向是由低地址向高地址。堆的大小受限于计算机系统中有效的虚拟内存。由此可见,堆获得的空间比较灵活,也比较大。参见堆栈说明