FreeRTOS-内存管理-完结篇

本文介绍了FreeRTOS的内存管理机制,包括heap_1到heap_5五种不同的内存管理方法。heap_1只提供内存申请,避免碎片;heap_2增加了内存释放但不处理碎片;heap_3是对C库malloc/free的封装,线程安全但效率较低;heap_4能处理内存碎片,适合动态分配;heap_5则允许内存跨多个不连续段,扩展了内存使用范围。通过对比,展示了各种内存管理策略的适用场景和优缺点。

FreeRTOS-内存管理

  • 无论是创建任务、队列、信号量还是其他的东西,都需要为其分配一定空间,前面我们都是运用动态内存申请的方法来申请空间,并且我们所使用的的动态内存申请函数都是FreeRTOS自己提供的,而不是使用C标准库中的malloc()和free()这两个函数,主要是因为以下原因:
  1. 内存动态管理效率低
  2. 线程不安全
  3. 不确定性高,每次执行时间不同
  4. 导致内存碎片
  5. 使链接器配置变得复杂
  • 所以FreeRTOS为我们提供了5种内存管理方法,这5中内存管理方法各有不同 ,分别存放在heap_1、heap_2、heap_3、heap_4、heap_5。在我看来,这五种方法更像是版本迭代,越往后功能越强,但功能强带来的问题就是效率变得比较低。在看这几种方法前我么先来看一下什么是内存碎片。

内存碎片

  • 所谓内存碎片,就是在动态申请和释放过程中,内存变得碎片化。下图表示了内存碎片的生成过程。
    在这里插入图片描述
  • 从上面可见,(1)是没有使用过的内存,但是随着内存的多次申请和释放,(4)中产生了很多空间较小的内存,而剩下的大块内存很少,那些空间小的内存就是聂村碎片。

五中内存管理方法对比

  • 这里仅就五种内存管理方法上做一个简单对比,不会对源码深入分析。

heap_1

  • heap1适用于那些一旦创建好就再也不会删除的任务,heap_1实际上仅提供了内存申请函数,而没有提供内存释放函数,所以内存一旦申请完成就不允
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值