C++堆和栈的区别

C++堆和栈的区别

  1. 首先,C++中内存分为五个区:堆、栈、自由存储区、全局/静态存储区、常量存储区。

  2. 其次,堆和自由存储区要对应C++的new和malloc内存分配。

  3. 了解完new和malloc后,我们知道C++默认使用堆来实现自由存储(new和delete是使用malloc和free的方式实现的),所以堆中资源是由程序员来控制的,而栈资源是由编译器自动管理的。

  4. 然后是堆和栈在数据结构上的区别,堆是一种特殊的完全二叉树,而栈是先进后出的,从而栈中存放的都是局部变量和函数参数。

  5. 堆和栈的内存管理方式:系统中维护了一个记录空闲地址的链表,通过链表将节点空间分配给程序,所以堆是不连续的,访问效率也比较慢;而栈是一块连续的内存区域。这导致经常在堆中new和delete会产生内存碎片,而栈不会,因为先进后出都是一一对应的。

  6. 其次是空间分布

    image-20231012102218226

最后,堆和栈的区别

image-20231012102353491

参考文献:C++中堆(heap)和栈(stack)的区别(面试中被问到的题目)_c++堆和栈的区别-CSDN博客

C/C++:内存分配,详解内存分布(P:图解及代码示例)_内存分布图-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值