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

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

3天内不再提示

单片机如何对内存进行管理

姚小熊27 来源:雷小天博客 作者:佚名 2019-11-02 10:04 次阅读

内存管理,是指软件运行时对计算机内存资源的分配和使用的技术。其最主要的目的是如何高效,快速的分配,并且在适当的时候释放和回收内存资源。前面我们有介绍过如何使用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个内存管理表项目的值都清零,标记释放,完成一次内存释放。关于分块式内存管理,我们就介绍到这里,想要了解更多内存管理的知识可以百度查找,网上也有很多这样的介绍。

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

    关注

    19

    文章

    7414

    浏览量

    87703
  • 内存
    +关注

    关注

    8

    文章

    2998

    浏览量

    73875
收藏 人收藏

    评论

    相关推荐

    Linux kernel内存管理模块结构分析

    基于上面章节的需求,Linux kernel从虚拟内存(VM)、DMA mapping以及DMA buffer sharing三个角度,对内存进行管理.
    发表于 09-19 11:55 1745次阅读
    Linux kernel<b class='flag-5'>内存</b><b class='flag-5'>管理</b>模块结构分析

    详解单片机内存分配

    对于初学者而言,对单片机内存分配往往最让人头疼,很多人学了单片机几年 都不知道单片机内部的内存使用情况是如何分配的。要了解 ROM(fla
    发表于 11-07 10:42 2270次阅读

    STM32单片机内存优化策略

    单片机开发中,内存优化是至关重要的,它不仅能够降低成本,还可以提高性能。本文将深入讨论如何在STM32单片机和C语言的环境中实施内存优化策略,以确保项目的顺利
    发表于 08-21 09:21 2438次阅读
    STM32<b class='flag-5'>单片机</b>的<b class='flag-5'>内存</b>优化策略

    讲解使用memheap内存管理算法对内部RAM和片外的SDRAM进行管理的方法

    在开发中由于单片机自带的 RAM 空间比较小,有时候需要扩展片外的 RAM 以供使用,RT-Thread 提供了 memheap 管理算法来管理多块不相邻的内存空间,本文以正点原子
    发表于 05-11 14:45

    实时单片机通讯网络中的内存管理

    摘要! 为提高单片机通讯的实时性 采用了动态的内存管理方法 并将其应用到AUTO2000DCS, 系统中 获得了满意的效果 关键词! 动态分区静态分区最先适应法内存
    发表于 03-26 16:17 138次下载
    实时<b class='flag-5'>单片机</b>通讯网络中的<b class='flag-5'>内存</b><b class='flag-5'>管理</b>

    51单片机如何使用动态内存

    本文档的主要内容详细介绍的是51单片机如何使用动态内存的详细资料免费下载。
    发表于 06-14 17:44 0次下载
    51<b class='flag-5'>单片机</b>如何使用动态<b class='flag-5'>内存</b>

    一个基于无操作系统的STM32单片机单片机内存管理

    标题:一个简单而强大的单片机内存管理器 文章出处:【微信公众号:玩转单片机】欢迎添加关注!文章转载请注明出处。  
    的头像 发表于 12-22 17:20 2505次阅读
    一个基于无操作系统的STM32<b class='flag-5'>单片机</b>的<b class='flag-5'>单片机内存</b><b class='flag-5'>管理</b>器

    分享可应用于单片机内存管理模块mem_malloc

    本次给大家分享一位大佬写的应用于单片机内存管理模块mem_malloc,这个mem_malloc的使用不会产生内存碎片,可以高效利用单片机ram空间。 mem_malloc代码仓库:
    的头像 发表于 06-25 08:54 2977次阅读
    分享可应用于<b class='flag-5'>单片机</b>的<b class='flag-5'>内存</b><b class='flag-5'>管理</b>模块mem_malloc

    基于51单片机6264扩展内存仿真设计(proteus仿真+程序)

    基于51单片机6264扩展内存仿真设计(proteus仿真+程序)(单片机原理及应用)-基于51单片机6264扩展内存仿真设计(proteu
    发表于 07-22 11:45 82次下载
    基于51<b class='flag-5'>单片机</b>6264扩展<b class='flag-5'>内存</b>仿真设计(proteus仿真+程序)

    单片机内存及运行原理

    一、单片机构成:二、CPU的作用三、内存管理 首先单片机内存可以大小分为ram和rom,这里就不再解释ram和rom的区别了,我们可以将其
    发表于 11-10 20:20 10次下载
    <b class='flag-5'>单片机内存</b>及运行原理

    【KEIL·单片机·扫盲贴】关于ARM单片机程序内存使用情况的细致讨论。

    【KEIL·单片机·扫盲贴】关于ARM单片机程序内存使用情况的细致讨论。
    发表于 11-25 12:06 9次下载
    【KEIL·<b class='flag-5'>单片机</b>·扫盲贴】关于ARM<b class='flag-5'>单片机</b>程序<b class='flag-5'>内存</b>使用情况的细致讨论。

    使用memheap内存管理算法对片内RAM和片外SDRAM进行管理的方法

      在开发中由于单片机自带的 RAM 空间比较小,有时候需要扩展片外的 RAM 以供使用,RT-Thread 提供了 memheap 管理算法来管理多块不相邻的内存空间,本文以正点原子
    的头像 发表于 06-17 08:53 3370次阅读
    使用memheap<b class='flag-5'>内存</b><b class='flag-5'>管理</b>算法对片内RAM和片外SDRAM<b class='flag-5'>进行管理</b>的方法

    单片机内存映射图解析

    一、如何控制单片机单片机内存映射图解析 这里以STM32F429芯片为例,讲解下单片机芯片内存映射图。从此图中可以看到芯片的外设被分配
    的头像 发表于 06-22 10:33 1157次阅读
    <b class='flag-5'>单片机</b>的<b class='flag-5'>内存</b>映射图解析

    单片机内存映射图解析

    一、如何控制单片机单片机内存映射图解析 这里以STM32F429芯片为例,讲解下单片机芯片内存映射图。从此图中可以看到芯片的外设被分配
    的头像 发表于 06-22 10:18 1679次阅读
    <b class='flag-5'>单片机</b>的<b class='flag-5'>内存</b>映射图解析

    你知道吗? 51单片机也有动态内存分配

    一、简述其实在51单片机中也可以使用动态内存,动态内存其实就是划出一块内存区域,将这块内存进行管理
    的头像 发表于 04-26 08:10 1357次阅读
    你知道吗? 51<b class='flag-5'>单片机</b>也有动态<b class='flag-5'>内存</b>分配