一种内存释放方法与流程

文档序号:13804637阅读:605来源:国知局
一种内存释放方法与流程

本发明涉及通信技术领域,尤其涉及一种内存释放方法。



背景技术:

随着音频编码技术的进步,在嵌入式平台上,需要给编码驱动程序提供大量的物理连续内存,现有的解决方式是通过cma(contiguousmemoryallocator,连续内存分配器)为编码驱动程序分配内存,而当驱动程序停止使用分配的内存时,通过特殊标记的迁移类型,cma将内存纳入伙伴系统的管理,在应用数据不足时作为备份内存补充给应用程序使用。驱动需要使用cma内存的时候,又能通过回收、迁移机制为驱动整理出连续的内存段。它很好的平衡了应用程序和驱动程序之间的内存需求,因此得到了广泛使用。当驱动程序停止使用cma分配的内存时,在对分配的内存进行释放时,现有的释放方法如图2所示都是将空闲页逐个进行释放,这种释放方式在释放的内存数量较大的时候,显得效率低下,并且耗时较长。



技术实现要素:

针对现有技术中释放内存段存在的上述问题,现提供一种旨在提高cma释放内存的速度,使释放内存的效率更高的内存释放方法。

具体技术方案如下:

一种内存释放方法,应用于对内存连续分配器分配的内存进行释放,其中,通过所述内存连续分配器提供一需要释放的内存段,所述内存段包括多个空闲页,获取一空闲页并将该空闲页定义为一待释放页,将所述待释放页与相邻的所述空闲页组合成一内存块并获取当前内存块的阶数=k=1,并将当前的阶数输出至所述内存连续分配器;

包括以下步骤:

步骤s1、判断是否存在与当前内存块相邻顺序的2k页的所述空闲页;

若是,执行步骤s2;

若否,所述内存段释放完毕并退出;

步骤s2、获取与当前内存块相邻顺序的2k页的所述空闲页;

步骤s3、将所述步骤s2中获取的所述空闲页与当前的内存块进行合并,以形成一内存块,令形成的所述内存块的阶数+1,k=k+1,并返回所述步骤s1。

优选的,所述连续内存分配器提供一释放模块,通过所述释放模块获取所述内存块的阶数所对应的数量的所述空闲页。

优选的,提供一伙伴系统,通过所述伙伴系统对所述空闲和所述待释放页组成的内存块进行释放,或者通过所述伙伴系统对所述空闲页组成的内存块进行释放。

优选的,需要释放的所述内存段为一物理地址连续的内存段。

优选的,每一个所述空闲页的大小为4kb。

优选的,每一个所述空闲页组成的数据块的阶数为0,所述阶数对应空闲页的数量。

上述技术方案具有如下优点或有益效果:可一次释放2k个空闲页,大大提高cma内存释放的速度及效率,克服了现有技术中cma内存释放是逐个进行释放,当内存数量较大释放耗时较长,效率较低的缺陷。

附图说明

参考所附附图,以更加充分的描述本发明的实施例。然而,所附附图仅用于说明和阐述,并不构成对本发明范围的限制。

图1为本发明一种内存释放方法的实施例的流程图;

图2为现有技术中释放内存的结构示意图;

图3为本发明一种内存释放方法的实施例中,关于释放内存段的结构示意图;

图4为本发明一种内存释放方法的实施例中,关于本发明中的释放方案与现有的默认释放方案的对比图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。

下面结合附图和具体实施例对本发明作进一步说明,但不作为本发明的限定。

本发明的技术方案中包括一种内存释放方法。

一种内存释放方法的实施例,应用于对内存连续分配器分配的内存进行释放,其中,通过内存连续分配器提供一需要释放的内存段,内存段包括多个空闲页,获取一空闲页并将该空闲页定义为一待释放页,将待释放页与相邻的空闲页组合成一内存块并获取当前内存块的阶数=k=1,并将当前的阶数输出至内存连续分配器;

如图1所示,包括以下步骤:

步骤s1、判断是否存在与当前内存块相邻顺序的2k页的空闲页;

若是,执行步骤s2;

若否,内存段释放完毕并退出;

步骤s2、获取与当前内存块相邻顺序的2k页的空闲页;

步骤s3、将步骤s2中获取的空闲页与当前的内存块进行合并,以形成一内存块,令形成的内存块的阶数+1,k=k+1,并返回步骤s1。

现有技术中cma释放内存方法,参考图2对该内存段的释放进行说明:

当编号为10的单页需要释放的时候,它可以和它后面的编号为11的页合并,生成一个order(内存块的阶数)为1(即21)的连续内存块;

重复上述步骤,连续内存块10~11的页可以和前面8~9的空闲页合并,生成order为2,范围从8~11的连续内存块;

如此继续循环,直到最后生成了order为4,范围从0~15的连续内存块。由于第16个空闲页已经被分配出去,所以无法继续再合并,因此释放过程终止。

上述的释放方法是根据空闲页的编号顺序逐个进行释放,因此每次释放时,伙伴系统都会从order为0开始逐级合并,释放效率非常低,尤其是在遇到需要释放的内存数量较大时释放所需的时间就会延时较长。

本发明中,则是获取每次一空闲页合并形成的内存块的阶数,根据该阶数获取下一次需要释放的空闲页的数量,并依次类推,直至内存段释放完毕。

在一种较优的实施方式中,连续内存分配器提供一释放模块,通过释放模块获取内存块的阶数所对应数量的空闲页。

上述技术方案中,为了对空闲页的维护,将多个空闲页组成内存块,每个内存块都有2的方幂个页,方幂的指数被称为阶order(阶数),伙伴系统基于2的方幂来申请释放空闲页。

在一种较优的实施方式中,提供一伙伴系统,通过伙伴系统对空闲和待释放页组成的内存块进行释放,或者通过伙伴系统对空闲页组成的内存块进行释放。

上述技术部方案中,伙伴系统是指,由一个母实体分成的两个各方面属性一致的两个子实体,这两个子实体就处于伙伴关系。在操作系统分配内存的过程中,一个内存块常常被分成两个大小相等的内存块,这两个大小相等的内存块就处于伙伴关系。

在一种较优的实施方式中,需要释放的内存段为一物理地址连续的内存段。

在一种较优的实施方式中,每一个空闲页的大小为4kb。

在一种较优的实施方式中,每一个空闲页组成的数据块的阶数为0。

以下通过一具体的实施方式进行说明,如图3所示,提供一内存段,其中内存段中包括0-15个空闲页,将编号为1的空闲页定义为待释放页,具体释放如下:

首先从第1个空闲页开始,第1个空闲页和第0个空闲页和合并成一个order为1的连续内存块,此时伙伴系统返回的order是1。

由于前面两个页都是连续的,并且已经构成了一个伙伴系统,在下次释放时,可一次性将变化为2~3的空闲页提交给伙伴系统,释放的空闲页和已经合并的页order相同,伙伴系统只需要一次操作就可以合并出order为2的连续内存块,并将order2返回给释放模块。

依次类推,第三次释放时可以一次性释放编号为4~7的连续空闲页,并和伙伴系统之前合并的0~3的内存块合并成0~7,形成order为3的内存块。

第四次释放则可以一次性释放8~15的空闲页,伙伴系统可以合并成0~15,order为4的连续内存块。

至此,本分发明中仅通过4次操作就完成了全部15个空闲页页的释放,而原方案中需要15次操作才能完成内存释放。

因此发明的方法能够大大提高内存释放的效率,释放的内存页数越多,提升越明显。

图4表示,本发明中优化的释放方案与默认释放方案的比较,具体说明如下:

横轴为单次释放的cma内存数量,以2次幂计算,10表示单次释放210,即1024个内存页即空闲页。

纵轴为释放完成所需要消耗的时间,单位为us。

从图中对比明显可见,新的优化释放方案中,当单次释放的内存页数量越多,阶数越大的时候,消耗的时间越低。在order为10的时候单次释放消耗的时间不足200us,而原方案中释放耗时达到530us左右。新方案耗时仅为原来方案的37%。

以上所述仅为本发明较佳的实施例,并非因此限制本发明的实施方式及保护范围,对于本领域技术人员而言,应当能够意识到凡运用本发明说明书及图示内容所作出的等同替换和显而易见的变化所得到的方案,均应当包含在本发明的保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1