笔试题集(一)

一、Stack与Heap的区别:


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

 

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注