堆和栈的区别

首先,当一个C/C++编译的程序占用内存分为:栈(stack),堆(heap),全局区(静态区static),文字常量区以及程序代码区。

堆:由程序员分配,若程序员在分配空间,到程序结束后没有释放则可能被操作系统(OS)回收

栈:由系统自动分配以及释放,用来存放函数的参数值,局部变量的值。


接着,聊一聊申请后系统的响应

堆:操作系统有一个记录空闲地址的链表,当系统受到程序的申请时,会遍历该列表,找到第一个空间大于所申请空间的堆结点,在链表中删除这个结点,并将这个空间分配给程序

栈:只要栈的剩余空间大于所申请空间,系统将为程序提供内存空间,否则报异常,显示为栈溢出。


最后聊一聊分配效率问题以及优缺点

堆:由程序员分配,速度慢,容易产生内存碎片(由于遍历出的空间地址往往会大于申请的空间,所以多余空间将会重新放入空闲空间链表之中),但优点则是分配起来最方便。

栈:系统自动分配,速度很快,但不受程序员控制。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值