堆和栈的几点区别

本文概要介绍了堆和栈的主要区别,包括管理方式、申请大小、碎片问题及分配效率。对于堆,由程序员负责释放,易导致内存泄漏;而栈由编译器管理,无需手动操作。堆内存空间不连续且大小受限于虚拟内存,容易产生碎片问题,而栈内存空间连续,申请大小固定,避免了碎片问题。

接下来就让小编大概介绍几点堆和栈的几点区别

  1. 管理方式
    对于堆来说,释放工作由程序员进行管理,容易产生内存泄漏
    对于栈说,是由编译器管理,无需我们手动管理
  2. 申请大小
    堆的内存空间是由系统的链表来存储的空闲的内存地址的,是不连续的内存空间,堆的大小是由计算机系统中有限的虚拟内存决定的,获得的空间比较灵活
    栈的内存空间是一块连续的内存空间,申请的大小也有一定的大小
  3. 碎片问题
    对于堆来讲,频繁的new/delete势必会造成内存空间的不连续,从而造成大量的内存碎片,使程序效率降低
    对于栈来讲,就不会产生这个问题,因为栈是先进后出的队列,他们一一对应着,不会造成一块内存的间隔
  4. 分配方式
    堆都是动态分配的,没有静态分配的堆。
    栈有两种分配方式:静态分配和动态分配,静态分配是编译器完成的,比如局部变量的分配。动态分配是由alloc函数进行分配的,与堆的区别就是,它动态分配得内存由编译器管理
  5. 分配效率
    堆的分配是由C/C++函数库来提供的,其内部实现异常复杂
    栈是由机器系统提供的数据结构,计算机在底层对栈提供了支持:分配专门的寄存器存放栈的地址,压栈和出栈都有专门的指令,效率还是比较高的

以上就是小编查阅书海整理的几点,望对大家有所帮助啊!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值