0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FreeRTOS内存碎片是怎么来的

麦辣鸡腿堡 来源:嵌入式Linux系统开发 作者:嵌入式Linux系统开 2023-07-30 10:29 次阅读

内存碎片

在看 FreeRTOS的内存分配方法之前我们先来看一下什么叫做内存碎片,看名字就知道是小块的、碎片化的内存。那么内存碎片是怎么来的呢?内存碎片是伴随着内存申请和释放而来的,如图所示。

图片

(1)、此时内存堆还没有经过任何操作,为全新的。

(2)、此时经过第一次内存分配,一共分出去了 4 块内存块,大小分别为 80B、80B、10B 和100B。

(3)、有些应用使用完内存,进行了释放,从左往右第一个 80B 和后面的 10B 这两个内存块就是释放的内存。如果此时有个应用需要 50B的内存,那么它可以从两个地方来获取到,一个是最前面的还没被分配过的剩余内存块,另一个就是刚刚释放出来的 80B 的内存块。但是很明显,刚刚释放出来的这个 10B
的内存块就没法用了,除非此时有另外一个应用所需要的内存小于10B。

(4)、经过很多次的申请和释放以后,内存块被不断的分割、最终导致大量很小的内存块!也就是图中 80B 和 50B这两个内存块之间的小内存块,这些内存块由于太小导致大多数应用无法使用,这些没法使用的内存块就沦为了内存碎片!

内存碎片是内存管理算法重点解决的一个问题,否则的话会导致实际可用的内存越来越少,最终应用程序因为分配不到合适的内存而奔溃!FreeRTOS 的
heap_4.c 就给我们提供了一个解决内存碎片的方法,那就是将内存碎片进行合并组成一个新的可用的大内存块。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    4983

    文章

    18286

    浏览量

    288519
  • 内存
    +关注

    关注

    8

    文章

    2767

    浏览量

    72774
  • FreeRTOS
    +关注

    关注

    12

    文章

    473

    浏览量

    61351
收藏 人收藏

    评论

    相关推荐

    C语言malloc申请内存时的碎片问题

    解决问题:malloc在申请内存的时候,内存碎片问题会导致原本内存大小足够,却申请大内存失败。
    发表于 08-06 16:58 1014次阅读
    C语言malloc申请<b class='flag-5'>内存</b>时的<b class='flag-5'>碎片</b>问题

    FreeRTOS内存机制详解

    FreeRTOS是一种实时操作系统,它提供了多种内存分配方式,包括动态内存分配和静态内存分配。
    的头像 发表于 12-31 16:49 1113次阅读
    <b class='flag-5'>FreeRTOS</b><b class='flag-5'>内存</b>机制详解

    请问mymalloc会产生内存碎片吗?

    malloc申请内存在释放后,会产生内存碎片,所以UCOSIII内有专门的内存申请。原子哥视频(UCOSIII视频19讲)最后的时候说可以用原子哥自己的mamalloc函数来申请
    发表于 10-16 04:35

    FreeRTOS内存管理的算法解析?

    关于FreeRTOS内存管理,有人测试过它给定的算法么?会不会有内存碎片的出现,如果产品一直运行,会不会出现内存崩溃的情况。求证啊。目前用h
    发表于 07-30 11:39

    如何避免内存碎片的产生

    考试题型:单选 8 道,不定项 2 道,编程 2 道,问答 1 道考点:进程间通讯的方式,linux的基本指令(考了grep,chmod),根据代码给出运行的结果问答题:简述内存碎片的定义,如何避免
    发表于 12-21 07:50

    Freertos关于堆内存管理的相关资料分享

    内存管理Malloc、Free防止内存碎片Freertos
    发表于 12-27 08:12

    FreeRTOS代码剖析之1:内存管理Heap

    内存管理是一个操作系统的重要组成部分之一,所有应用程序都离不开操作系统的内存管理。因此,在剖析FreeRTOS的内核代码之前,前对FreeRTOS
    发表于 02-09 05:25 768次阅读
    <b class='flag-5'>FreeRTOS</b>代码剖析之1:<b class='flag-5'>内存</b>管理Heap

    FreeRTOS代码剖析之2:内存管理Heap

    FreeRTOS8.0.1这个版本中,一共有四个内存堆模型。这一次讲的就是第二个模型Heap_2.c。从一开始就可以看到注释中对Heap_2的模型解释:这是对pvPortMalloc
    发表于 02-09 05:28 629次阅读
    <b class='flag-5'>FreeRTOS</b>代码剖析之2:<b class='flag-5'>内存</b>管理Heap

    你知道linux kernel内存碎片防治技术?

    Linux kernel组织管理物理内存的方式是buddy system(伙伴系统),而物理内存碎片正式buddy system的弱点之一,为了预防以及解决碎片问题,kernel采取了
    发表于 05-10 10:59 823次阅读

    关于FreeRTOS内存分配多少才合适

    FreeRTOS内存分配多少才合适
    的头像 发表于 03-06 15:04 1.7w次阅读

    FreeRTOS高级篇7---FreeRTOS内存管理分析

    FreeRTOS操作系统将内核与内存管理分开实现,操作系统内核仅规定了必要的内存管理函数原型,而不关心这些内存管理函数是如何实现的。这...
    发表于 01-26 17:36 7次下载
    <b class='flag-5'>FreeRTOS</b>高级篇7---<b class='flag-5'>FreeRTOS</b><b class='flag-5'>内存</b>管理分析

    FreeRTOS系列第8篇---FreeRTOS内存管理

    本文介绍内存管理的基础知识,详细源码分析见《 FreeRTOS高级篇7---FreeRTOS内存管理分析》
    发表于 01-26 17:56 17次下载
    <b class='flag-5'>FreeRTOS</b>系列第8篇---<b class='flag-5'>FreeRTOS</b><b class='flag-5'>内存</b>管理

    什么是内存碎片Linux

    什么是内存碎片内存碎片在Linux很早的时候就已经出现了,了解早期内存碎片产生的历史,有利于
    的头像 发表于 10-08 10:12 373次阅读
    什么是<b class='flag-5'>内存</b><b class='flag-5'>碎片</b>Linux

    如何解决内存碎片内存交换效率慢的问题

    内存分页 分段的好处是能产生连续的内存空间,但是会出现大量内存碎片内存交换效率低的问题 先思考一下怎么解决这两个问题,
    的头像 发表于 10-09 16:57 551次阅读
    如何解决<b class='flag-5'>内存</b><b class='flag-5'>碎片</b>与<b class='flag-5'>内存</b>交换效率慢的问题

    FreeRTOS内存管理实现

    FreeRTOS是一个为嵌入式系统设计的开源实时操作系统。它提供了一个多任务内核和一系列功能,适合在资源受限的设备上管理实时任务和应用程序。FreeRTOS内存管理的关键方面之一是堆管理。
    的头像 发表于 10-10 16:17 505次阅读
    <b class='flag-5'>FreeRTOS</b><b class='flag-5'>内存</b>管理实现