首页 > 代码库 > 2017.3.23
2017.3.23
堆和栈的区别
一、申请方式
栈:由系统自动分配
堆:需要程序员自己申请,并指明大小
二、申请后系统的响应
栈:只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢出
堆:操作系统有一个记录空间内存地址的链表,当系统收到程序的申请时,会遍历该链表,寻找第一个空间大于所申请空间的堆节点,然后将该节点从空闲节点链表中删除,并将该节点的空间分配给程序
三、申请大小的限制
栈:在windows 下,栈是向低地址扩展的数据结构,是一块连续的内存区域。也就是栈顶的地址和栈的最大容量是系统预先规定好了的,在windows 下,栈的大小是2MB.
堆:堆是向高地址扩展的数据结构,是不连续的内存区域。
四、申请效率
栈:由系统自动分配,速度较快,但程序员无法控制
堆:是由new 分配的内存,一般速度比较慢,而且容易产生内存碎片
五、堆和栈中存储的内容
栈:在函数调用时,第一个进栈的是主函数的下一个指令的地址,然后是函数的各个参数,参数是从右往左入栈的,然后是函数中的局部变量。
堆:一般在堆的头部用一个字节存放堆的大小。堆中的具体内容由程序员安排。
2017.3.23
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。