我们从2011年坚守至今,只想做存粹的技术论坛。  由于网站在外面,点击附件后要很长世间才弹出下载,请耐心等待,勿重复点击不要用Edge和IE浏览器下载,否则提示不安全下载不了

 找回密码
 立即注册
搜索
查看: 1550|回复: 7

[技术文章] 单片机是怎么对内存进行管理的?

[复制链接]

该用户从未签到

374

主题

1210

回帖

1936

积分

PADS高级班留级1期

积分
1936

终身成就奖

发表于 2019-2-25 21:04:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区

您需要 登录 才可以下载或查看,没有账号?立即注册

×
内存管理,是指软件运行时对计算机内存资源的分配和使用的技术。其最主要的目的是如何高效,快速的分配,并且在适当的时候释放和回收内存资源。前面我们有介绍过如何使用 FSMC 外扩 SRAM,实现内存容量的扩展。通过扩展后,我们可使用的内存(外扩 SRAM 容量是 1MB,STM32F103ZET6 内部 SRAM 有64KB)就比较多了。
尽管有这么多可使用的内存,但我们还是得使用某种方式来有效管理这些内存,这种方式和我们学习 C 语言时,使用 malloc 和 free 函数来申请内存和内存释放类似,malloc 用于申请内存,free 用于释放内存。本文我们就来介绍一种简单的内存管理方式:分块内存管理。该方法的实现原理如图 44.1.1 所示:


                               
登录/注册后可看大图
从上图我们可以看出,内存管理由内存池和内存管理表两部分组成,内存池被分成 n 个内存块,然后对应内存管理表,内存管理表就是用来标识相应的内存块是否使用,我们可以对它进行设置。当相应的内存管理表设置为 0 的时候,表示该内存块没有被使用;而当内存管理表设置为非零的时候,表示该内存已被使用,而内存管理表里面的数字表示当前申请内存块的数量,且申请的内存块是连续的。
从上图中我们还可以看出内存分配的方向是从底到顶的分配方向,即首先从最末端开始找空内存。通常当内存管理刚初始化的时候,内存表全部清零,表示没有任何内存块被占用。
(1)内存分配原理
当指针 p 调用 malloc 申请内存的时候,先判断 p 要分配的内存块数(m),然后从第 n 项开始,向下查找,直到找到 m 块连续的空内存块(即对应内存管理表项为 0),然后将这 m 个内存管理表项的值都设置为 m(标记被占用),最后,把最后的这个空内存块的地址返回指针 p,完成一次分配。注意,如果当内存不够的时候(找到最后也没找到连续的 m 块空闲内存),则返回 NULL 给 p,表示分配失败。
(2)内存释放原理
当 p 申请的内存用完,需要释放的时候,调用 free 函数实现。free 函数先判断 p 指向的内存地址所对应的内存块,然后找到对应的内存管理表项目,得到p 所占用的内存块数目 m(内存管理表项目的值就是所分配内存块的数目),将这 m 个内存管理表项目的值都清零,标记释放,完成一次内存释放。关于分块式内存管理,我们就介绍到这里,想要了解更多内存管理的知识可以百度查找,网上也有很多这样的介绍。
回复

使用道具 举报

该用户从未签到

1

主题

6218

回帖

8731

积分

二级逆天

积分
8731

终身成就奖特殊贡献奖原创先锋奖优秀斑竹奖

QQ
发表于 2019-3-20 09:48:06 | 显示全部楼层
回复

使用道具 举报

该用户从未签到

8

主题

2158

回帖

0

积分

二级逆天

积分
0

社区居民终身成就奖

QQ
发表于 2019-5-9 08:21:34 | 显示全部楼层
回复

使用道具 举报

  • TA的每日心情
    开心
    11 小时前
  • 签到天数: 161 天

    [LV.7]常住居民III

    2

    主题

    8788

    回帖

    1万

    积分

    三级逆天

    积分
    10247

    社区居民终身成就奖特殊贡献奖原创先锋奖

    QQ
    发表于 2020-4-29 08:52:51 | 显示全部楼层
    回复

    使用道具 举报

    该用户从未签到

    196

    主题

    3559

    回帖

    2004

    积分

    二级逆天

    积分
    2004

    终身成就奖特殊贡献奖原创先锋奖

    发表于 2020-10-4 13:46:35 | 显示全部楼层
    回复

    使用道具 举报

  • TA的每日心情
    开心
    11 小时前
  • 签到天数: 161 天

    [LV.7]常住居民III

    2

    主题

    8788

    回帖

    1万

    积分

    三级逆天

    积分
    10247

    社区居民终身成就奖特殊贡献奖原创先锋奖

    QQ
    发表于 2020-12-29 08:45:14 | 显示全部楼层
    回复

    使用道具 举报

    该用户从未签到

    1

    主题

    69

    回帖

    0

    积分

    一级逆天

    积分
    0

    终身成就奖

    发表于 2021-1-1 08:44:48 | 显示全部楼层
    回复

    使用道具 举报

    该用户从未签到

    30

    主题

    1427

    回帖

    1854

    积分

    二级逆天

    积分
    1854

    终身成就奖特殊贡献奖原创先锋奖

    发表于 2023-3-8 08:37:14 | 显示全部楼层
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    每日签到,有金币领取。


    Copyright ©2011-2024 NTpcb.com All Right Reserved.  Powered by Discuz! (NTpcb)

    本站信息均由会员发表,不代表NTpcb立场,如侵犯了您的权利请发帖投诉

    ( 闽ICP备2024076463号-1 ) 论坛技术支持QQ群171867948 ,论坛问题,充值问题请联系QQ1308068381

    平平安安
    TOP
    快速回复 返回顶部 返回列表