堆和栈的区别
一、申请方式
栈:由系统自动分配
堆:需要程序员自己申请,并指明大小
二、申请后系统的响应
栈:只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢出
堆:操作系统有一个记录空间内存地址的链表,当系统收到程序的申请时,会遍历该链表,寻找第一个空间大于所申请空间的堆节点,然后将该节点从空闲节点链表中删除,并将该节点的空间分配给程序
三、申请大小的限制
栈:在windows 下,栈是向低地址扩展的数据结构,是一块连续的内存区域。也就是栈顶的地址和栈的最大容量是系统预先规定好了的,在windows 下,栈的大小是2MB.
堆:堆是向高地址扩展的数据结构,是不连续的内存区域。
四、申请效率
栈:由系统自动分配,速度较快,但程序员无法控制
堆:是由new 分配的内存,一般速度比较慢,而且容易产生内存碎片
五、堆和栈中存储的内容
栈:在函数调用时,第一个进栈的是主函数的下一个指令的地址,然后是函数的各个参数,参数是从右往左入栈的,然后是函数中的局部变量。
堆:一般在堆的头部用一个字节存放堆的大小。堆中的具体内容由程序员安排。
时间: 2024-10-08 18:01:53