堆(Heap)和栈(Stack)的区别

本文详细阐述了栈和堆两种内存区域的区别,包括它们的申请方式、大小、效率、存储内容以及底层实现。栈是系统自动分配和释放,适用于局部变量和函数参数,而堆则需要程序员手动管理,适合大块内存的动态分配。栈内存小但速度快,堆内存大但可能产生碎片。此外,栈是连续空间,堆则是不连续的。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

堆区:

  1. 动态内存分配
  2. malloc/free
  3. realloc
  4. calloc

栈区

  1. 局部变量
  2. 函数的形式参数
  3. 函数调用也开辟空间

**

两者区别

**

1. 申请方式不同:

的空间由系统自动分配/释放
上的空间需要程序员自己申请,并指明大小,并由程序员进行释放

2. 申请大小不同:

获得的空间较小,在Windows下,栈是向低地址扩展的数据结构;
获得的空间较大,堆是向高地址扩展的数据结构。

3. 申请效率不同:

是由系统自动分配,速度较快,但是程序员是无法控制的;
是由new分配的内存,一般速度比较慢,而且容易产生内存碎片,不过用起来最方便。

4. 存储内容不同:
在函数调用时,函数调用语句的下一条可执行语句的地址第一个进栈,然后函数的各个参数进栈,其中静态变量是不入栈的。
一般是在头部用一个字节存放堆的大小,堆中的具体内容是人为安排;

5. 底层不同:

连续的空间;
不连续的空间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值