栈和堆区别

堆与栈实际上是操作系统对进程占用的内存空间的两种管理方式,主要有如下几种区别

  1. 管理方式不同,栈是系统自动分配,堆要让程序员分配,不过容易造成内存泄漏
  2. 空间大小不同,栈大小要远远小于堆大小,栈的大小 64bits 的 Windows 默认 1MB,堆默认10Mb
  3. 生长方向不同,堆的生长方向向上,内存地址由低到高;栈的生长方向向下,内存地址由高到低。
  4. 分配效率不同,堆的效率比栈要低得多。
  5. 存放内容不同,栈存放的内容,函数返回地址、相关参数、局部变量和寄存器内容等。当主函数调用另 外一个函数的时候,要对当前函数执行断点进行保存,需要使用栈来实现,首先入栈的是主函数下一条语句的 地址,即扩展指针寄存器的内容(EIP),然后是当前栈帧的底部地址,即扩展基址指针寄存器内容 (EBP),再然后是被调函数的实参等,一般情况下是按照从右向左的顺序入栈,之后是被调函数的局部变 量,注意静态变量是存放在数据段或者BSS段,是不入栈的。出栈的顺序正好相反,最终栈顶指向主函数下一 条语句的地址,主程序又从该地址开始执行。堆,一般情况堆顶使用一个字节的空间来存放堆的大小,而堆中 具体存放内容是由程序员来填充的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值