内存空间分布及堆栈的区别

内存空间分布
内存模型(4G)大小
内核空间(应用不可访问)约1G
栈空间(局部变量)约3G
堆空间(申请的内存空间(malloc))
全局的数据空间(static)(初始化、未初始化)
代码段(只读数据段)
起始地址 0x00

数据段 = 全局 + 只读

内存中的栈区处于相对高的地址,如果以地址的增长的方向为上的话,栈地址是向下增长、堆地址是向上增长。

数据结构的堆栈

  • 一种先进后出的数据结构
  • :堆可以被看成是一棵树,如:堆排序

内存中的堆栈

  • 栈:由操作系统(编译器)自动分配、释放,存放函数的参数值,局部变量等,被调用时处在存储空间中,调用完毕立即释放。
  • 堆:一般由程序员申请、分配、释放,通过new 、malloc

比较

回收方式
  • 栈:自动分配,自动回收,比如定义一个char a;

    栈上的空间是自动分配自动回收的,所以栈上的数据的生存周期只是在函数的运行过程中,运行后就释放掉,不可以再访问。

  • 堆:程序员按需申请需要的大小空间,例如:

    malloc(5 * sizeof(int) );

    开辟个5个整形数据大小的空间,只要程序员不free()就一直可以访问到,不过这是危险的,忘记释放会造成内存泄漏。

申请效率
  • 栈:由系统分配,速度较快。
  • 栈:由new分配的内存,一般速度比较慢。
申请大小
  • 栈:在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存区域。指栈顶的地址和栈的最大容量是系统预定好的。所以,能从栈获得的空间较小
  • 栈:堆是向高地址扩展的数据结构,是不连续的内存分布。因为系统是用链表来储存空闲内存地址的。所以,堆课获得能申请的空间灵活,也比较大。
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值