内存管理,是指软件运行时对计算机内存资源的分配和使用的技术。其最主要的目的是如何高效,快速的分配,并且在适当的时候释放和回收内存资源。前面我们有介绍过如何使用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个内存管理表项目的值都清零,标记释放,完成一次内存释放。关于分块式内存管理,我们就介绍到这里,想要了解更多内存管理的知识可以百度查找,网上也有很多这样的介绍。
TensorFlow官方发布消息称将引入一个新的优化工具包
你一定要知道从原理图到PCB设计流程
一种新型的LED显示屏获取显示数据方法
5G让印度电信富豪头疼 买频谱太贵不买没前途
Marvell推出业界首批音视频桥接SoC的LinkStreet系列器件
单片机如何对内存进行管理
启扬方案:启扬安卓一体机打造智能取餐柜解决方案
一文看懂三菱触摸屏型号价格与选择技巧
通过MarshallAI优化交通管理,帮助城市更接近碳中和
福特可移动的充电设备专利
1N5408功率二极管的基本概念及应用电路
隆基与enercity达成协议 为12000户家庭送去绿电
关于pipeline 以及 unroll 指令的介绍
链路上小段线的阻抗突变到底会不会影响信号质量?
三星半导体谈应对内存墙限制的解决方案
集光智慧社区解决方案
如何创建和使用BitKeep数字资产钱包
消除EMI有助于确保准确的测试测量
自动化生产工厂里,工业机器人一定是绝对的主角
西电学子问鼎EDA设计精英挑战赛最高奖项麒麟杯