一种应用于MCU的高效动态内存管理方法技术

技术编号:23342954 阅读:51 留言:0更新日期:2020-02-15 03:45
本发明专利技术属于计算机软件设计领域,公开了一种应用于小型MCU的高效动态内存申请方法,主要解决在小型MCU没有堆空间而动态管理内存的问题,本发明专利技术采用对大块内存块进行管理,保证内存在申请的释放的过程中碎片率低,使用MAT表标记内存块使用情况,并且在内存块查找过程中采用MAT表匹配优化查找速度。本发明专利技术提供了在全局区对要管理的全局内存初始化功能,内存动态申请功能,内存释放功能。该种方法占用系统资源少,执行效率高,内存碎片化率低,特别适用于内存资源紧张的小型MCU中。

An efficient dynamic memory management method applied to MCU

【技术实现步骤摘要】
一种应用于MCU的高效动态内存管理方法
本专利技术属于计算机软件设计领域,涉及一种应用于MCU的高效动态内存管理方法。
技术介绍
由于嵌入式环境中,特别是小型MCU中拥有的系统资源通常比较小,尤其是珍贵的内存资源,因此内存的使用将成为嵌入式系统性能的关键,在一些传统的大型系统平台上软件设计中,经常会使用到C标准库的函数malloc来动态申请内存,这种方法申请的内存都是在堆中申请的内存,在一些小型MCU系统启动管理中没有对内存中进行堆栈的划分,因此不能使用malloc函数对内存进行管理,而且C标准库的动态内存申请方法实时性较差,使用后内存碎片率比较高。传统上小型MCU设计中偏向于使用静态内存,静态内存分配要求编译时将程序运行所需要的内存确定好,在整个程序运行过程中不再进行分配和释放。而动态内存分配可以根据程序执行过程中所需的内存大小在运行时进行分配。因此相比于静态分配,动态分配更加灵活,内存的利用率更高。在小型MCU中动态内存的使用对优秀的嵌入式设计意义重大。
技术实现思路
(一)专利技术目的为解决小型MCU中传统方法本文档来自技高网...

【技术保护点】
1.一种应用于MCU的高效动态内存管理方法,其特征在于,包括以下步骤:/n步骤S1:采用多个字节内存块的形式对内存进行管理;/n步骤S2:内存堆初始化;/n步骤S3:内存堆申请;/n步骤S4:内存堆释放。/n

【技术特征摘要】
1.一种应用于MCU的高效动态内存管理方法,其特征在于,包括以下步骤:
步骤S1:采用多个字节内存块的形式对内存进行管理;
步骤S2:内存堆初始化;
步骤S3:内存堆申请;
步骤S4:内存堆释放。


2.如权利要求1所述的应用于MCU的高效动态内存管理方法,其特征在于,所述步骤S1中,每一个内存块单位为8字节,设计一个消息管理结构体HEAD_STRU,结构体含有两个成员变量,一个是偏移位置变量Offset,类型为unsignedshort型,另一个成员为内存块的数量变量size,类型为unsignedshort类型;定义一个数组作为被管理的内存堆:
Heap[BLOCK_NUM/8+BLOCK_NUM*BLOCK_SIZE]
BLOCK_NUM为块数量,BLOCK_SIZE为块大小,数组的类型为unsignedchar型,内存堆的管理需要两个指针变量,定义MAT表首地址变量pMAT,变量类型为unsignedchar*,定义MEM表首地址变量pMEM,变量类型也为unsignedchar*。


3.如权利要求2所述的应用于MCU的高效动态内存管理方法,其特征在于,所述步骤S2中,内存堆初始化时,首先对所有需要管理的内存堆Heap数组进行清零操作,分别计算MAT表的首地址和MEM表的首地址,MAT表首地址为Heap数组的地址,MEM的首地址为Heap+BLOCK_NUM/8。


4.如权利要求3所述的应用于MCU的高效动态内存管理方法,其特征在于,所述步骤S3中,内存堆申请时,先计算申请空间所需要的块数,遍历寻找一个连续的块符合申请块数,如果找到连续的块数符合申请的块数,则将连续块的首地址返回,并将这几个块对应的MAT表位置标记为已使用,保存偏移值和块数信息到本次内存申请的头指针所指的位置。

【专利技术属性】
技术研发人员:王雨龙
申请(专利权)人:天津津航计算技术研究所
类型:发明
国别省市:天津;12

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1