内存的五大分区

在这里插入图片描述
:编译器需要的时候分配,需要的时候压栈,返回的时候弹栈。存储的变量一般是:局部变量,函数参数。
:就是new分配的内存块,内存块的释放编译器不管,需要人工去控制,一般一个new就要对应一个delete。需要手动申请和释放
自由存储区:使用malloc申请的内存块,和堆相似,使用free释放
全局/静态存储区:全局变量和静态变量被分配到一块内存中。
常量存储区:比较特殊的存储区,存放常量。不允许修改。(当然非正当修改,方法有很多)

堆和栈的区别

  1. 管理方式不同(栈:编译器自动管理。堆:需要人工管理,如果不释放,就会产生内存泄漏)
  2. 空间大小不同(32位系统下,堆内存可以达到4G空间,从这个角度来看堆内存没什么限制。栈:有一定的存储空间,较小,只有几M)
  3. 能否产生碎片不同 (堆会产生,栈不会)
  4. 生长方向不同 (堆,向内存地址增加的方向,栈,向着内存地址减小的方向增长)
  5. 分配方式不同(堆都是动态分配的。栈:静态分配局部变量,静态分配:alloca)
  6. 分配效率不同(栈的效率高,因为栈是系统内部提供的数据结构,有专门的寄存器,而堆是C/C++,分装好的算法,申请空间时,效率没有栈高)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值