返回首页  设为首页  加入收藏  今天是:
网站首页电脑主板电脑cpu电脑内存电脑硬盘电脑显卡电脑电源显示器电脑配件电脑维修
相关文章
 基于FreeRTOS的STM32F103系统…
 一文详解CP15协处理器
 电子纸显示器——大上创新故…
 老显示器没有可变帧率同步该…
 AOC推出新款27寸180Hz电竞显…
 【期股联动】玻璃主连下跌超…
 苹果电脑cpu温度过高怎么办(…
 酷睿还是锐龙?AI办公时代轻…
 PPC-3312QM工业电脑让智能快…
 电脑体验从此大幅提升!抓住…
 怎么把计算机电脑安全国际快…
 华硕主板1111销售额第一 绝对…
 HDMI 21接口名不副实?那可能…
 显示器的种类有哪些 怎样选择…
 2023-27寸 4K  IPS 显示器推…
 电脑开机后总是闪屏怎么回事…
 分析师称苹果正在为MacBook …
 IDC:2023年上半年中国电脑显…
 新买的笔记本电脑风扇声音很…
 cpu厂家排名(台式电脑cpu排行…
 2022年游戏台式电脑十大品牌…
 CPU风扇声音大怎么办?这三种…
 2023年度最佳电脑硬件产品评…
 显卡如何安装到主板上
 2023年8月中国大陆主板显卡出…
 散热优秀性能不错售后给力微…
 步步有动图 这篇应该是知乎最…
 华硕发布AMD Zen4撕裂者7000…
 聊聊FreeRTOS内存管理方案及…
 在RTX 4090被限制的时代下让…
 双十一值得选择的大尺寸轻薄…
 Redis 排障:你永远不知道告…
 GPS受RGB屏幕干扰严重该如何…
 雷克萨斯LM350七座国六现车无…
 雷克萨斯LM350国六现车港口售…
 全新雷克萨斯LM350四座六座七…
 全新雷克萨斯LM商务车支持公…
 AR笔记本电脑: 使屏幕随时取…
 IDC:上半年消费市场笔记本电…
 豪威集团推出业界首款用于笔…
 中国电信中兴联合推出!5G云…
 中科院公布材料学大模型零一…
 研祥智能COM-1505-FT工控主板…
 双11买显卡不后悔华硕BTF背插…
 芯瞳荣获-2023年度硬核中国芯…
 路虎发现4改装航空座椅 专车…
 双11买显卡不后悔华硕BTF背插…
 信息资讯中心-益盟操盘手
 行业第一!天玑9300内存硬件…
 2000多元大内存手机推荐16GB…
专题栏目
网络
您现在的位置: 电脑评测网 >> 电脑内存 >> 正文
高级搜索
基于FreeRTOS的STM32F103系统—Heap_4内存管理机制介绍
作者:佚名 文章来源:本站原创 点击数: 更新时间:2023/11/15 20:58:58 | 【字体:

  王坛蜜首先介绍一下用到的重要的结构体-标记内存块,在每个存放数据的内存块前都会有一个这样的标记结构体。

  里面有两个变量,pxNextFreeBlock指向下一个内存块,xBlockSize用来表示它所标记的内存块大小。

  经过一系列的操作,使初始化后,空闲内存表的起始地址为字节对齐,这里和heap_2不同的地方是,使用了临时变量uxAddress存储中间计算出来的一些地址,这里uxAddress存储的是字节对齐后的初始地址,然后赋值给pucAlignedHeap变量中。

  这部分代码用来初始化空闲内存表的头和尾,使头的下一个内存块指向字节对齐后的首地址,大小初始化为0;这里的uxAddress变量经过一系列操作以及变成了内存块的末地址,然后使尾的首地址指向末地址(pxEnd=(void *)uxAddress),大小初始化为0,尾的下一个内存块为NULL。

  在申请内存的最开始,把整个内存堆都看成一个整体,作为一个大内存块,这个内存块之前也需要有一个标记结构体,也就是pxFirstFreeBlock结构体,这里对这个结构体进行初始化,它的首地址就是字节对齐后的地址,大小是尾地址uxAddess-内存块字节对齐后的首地址,下一个内存块指向pxEnd。

  先定义两个用到的局部变量,pxIterator相当于C++中容器的迭代器,puc就是个临时变量。

  这里就是使用迭代器一次次循环,知道找到空闲内存表中满足内存要求(pxIterator->

  pxNextFreeBlock

  这里是判断要插入的这块内存和前一块内存是否相邻,如果相邻就合并成一块,判断是否相邻的条件是puc + pxIterator->

  xBlockSize ) == ( uint8_t * ) pxBlockToInsert,插入点地址+这块内存的大小==要插入块首地址;即上一块末地址==要插入块起始地址

  判断一下想要插入数据的内存块是否被使用,就是和xBlockAllocateBit变量做一次与运算,如果结果不是1,则说明没被使用;在确保要插入的大小大于0之后,需要附加上标记结构体的大小(8字节)后,再进行字节对齐。

  如果找到的是pxEnd表示没有内存可以分配,否则就将内存首地址保存在 pvReturn 中,函数返回的时候返回此值,然后将这块内存从空闲内存表中删除

  申请的内存大小小于空闲的一大块内存的大小,则将其分割,剩下的留着,相当于给空闲内存块的首地址做一个地址偏移:新的空闲内存块=满足要求的内存块首地址+需要的内存块首地址,然后更新新的空闲内存块的大小,并将其插入到空闲内存表。

  传入的数据地址没包含标志结构体,需要先做减法,进行地址移位,然后将包含了标志结构体的首地址保存在pxLink中

  如果要释放的内存真的被使用,就开始释放操作,先把首位变0,表示变成空闲,然后更新空闲内存大小,将这块内存插入回空闲内存表中,要注意:释放和申请内存,并不是把这块内存从一个链表中拿出来了,只是做了一些标记,让程序知道这部分被占用,有数据,在释放内存之前我们将数据删除,然后把标志位改为空闲状态就行,这就是释放的本质。

  其他的函数主要就是直接返回我们之前更新的全局变量,终于把基础知识都铺垫完了,下面结合具体项目程序谈谈怎么优化了。

电脑内存录入:admin    责任编辑:admin 
  • 上一个电脑内存:

  • 下一个电脑内存: 没有了
  •  
     栏目文章
    普通电脑内存 基于FreeRTOS的STM32F103系统—Heap_4内存管理… (11-15)
    普通电脑内存 一文详解CP15协处理器 (11-15)
    普通电脑内存 聊聊FreeRTOS内存管理方案及相关的优化措施 (11-14)
    普通电脑内存 在RTX 4090被限制的时代下让大模型使用RLHF更… (11-14)
    普通电脑内存 双十一值得选择的大尺寸轻薄本——惠普星Book… (11-14)
    普通电脑内存 Redis 排障:你永远不知道告警和下班谁先到来… (11-14)
    普通电脑内存 信息资讯中心-益盟操盘手 (11-14)
    普通电脑内存 行业第一!天玑9300内存硬件压缩技术大幅降低… (11-14)
    普通电脑内存 2000多元大内存手机推荐16GB+1TB配置给力“闭… (11-14)
    普通电脑内存 澜起科技:DDR5内存接口芯片的子代迭代已正式… (11-14)
    普通电脑内存 内存、闪存大涨价要来了!明年将出现缺货潮 (11-14)
    普通电脑内存 苹果发布 29 分钟视频:详解 A17 Pro 和 M3 系… (11-12)
    普通电脑内存 单条128GB DDR5-8000内存诞生!1TB也是小意思 (11-10)
    普通电脑内存 原神pc端内存多大 原神在电脑上需要占用多少内… (11-10)
    普通电脑内存 BB鸭 苹果高管解释黄金内存;董明珠首次回应孟… (11-10)
    普通电脑内存 脑洞非常大找猫怎么过-找猫通关攻略 (11-10)
    普通电脑内存 遥遥领先?苹果被批电脑内存又少又贵老总却老… (11-10)
    普通电脑内存 ram英语ram英语怎么读 (11-09)
    普通电脑内存 中信建投点评OpenAI首届开发者大会:利好相关… (11-09)
    普通电脑内存 xs运行内存是多少 (11-09)