内存管理方法、装置、电子设备及存储介质
文献发布时间:2024-04-18 19:58:26
技术领域
本申请涉及内存管理技术领域,特别涉及一种内存管理方法、装置、电子设备及存储介质。
背景技术
现有的实时系统的内存分配,是使用例如C函数库(比如glibc)中的malloc函数进行分配的。malloc函数分配过程为:在内存的动态存储区中分配一个长度为size的连续空间,当内存不再使用时,则将闲置的内存块释放,把动态申请的内存返还给系统。但是malloc分配算法比较复杂,需要的动态内存的大小不同,每一次对应的分配过程中的分配时间不定。并且,动态内存分配是一个不断申请内存和释放内存的过程,在此过程中需要进行指针对齐,以实现内存对齐,而内存对齐会产生很多的碎片化内存,造成了内存的浪费。因此,现有的内存管理方法,存在内存分配时间不确定,即有时候内存分配需要的时间过长,以及会产生很多碎片化内存,造成内存浪费的问题。
发明内容
本申请提供了一种内存管理方法,在内存的分配过程中,能够根据内存块的使用情况,实时调整内存块的大小和调整内存块的分割与合并策略,有效减少了碎片化内存的产生,提高了内存分配效率,并且采用提级分配方式,有效减少了内存分配需要的时间。
为解决上述技术问题,第一方面,本申请的实施方式提供了一种内存管理方法,该方法包括:在接收到内存申请请求的情况下,基于第一数据表确定第一内存块,并将第一内存块分配给内存申请请求对应的应用,第一内存块为基于第一数据表确定的处于空闲状态且可使用内存大于内存申请请求所请求内存的一个内存块,第一数据表中存储有处于空闲状态的内存块的内存块信息,内存块信息包括可使用内存信息和地址信息;在接收到内存释放请求的情况下,基于第二数据表确定内存释放请求对应的第二内存块的分配次数,在分配次数大于等于第一阈值的情况下,释放第二内存块的内存,并将第二内存块的内存块信息存储至第一数据表中,在分配次数小于第一阈值的情况下,释放第二内存块的内存,将第二内存块与第三内存块合并得到第四内存块,并将第四内存块的内存块信息存储至第一数据表中,第三内存块为基于第一数据表确定的处于空闲状态且地址与第二内存块的地址相邻的内存块,第二数据表中存储有内存块的分配次数信息。
本申请实现方式中,在接收到内存申请请求的情况下,将处于空闲状态且可使用内存大于内存申请请求所请求内存的第一内存块分配给内存申请请求对应的应用,使得分配的内存块肯定能够满足内存申请请求对应的应用使用,避免了在分配内存的过程中需要遍历整个第一数据表查找可使用内存与内存申请请求所请求内存的大小一样的内存块而花费大量的时间,有效减少了内存分配需要的时间。
在接收到内存释放请求的情况下,在根据第二数据表确定内存释放请求对应的第二内存块的分配次数大于第一阈值的情况下,说明第二内存块的使用频率比较高。因此,释放第二内存块的内存,并将第二内存块的内存块信息存储至第一数据表中,将第二内存块不与其它内存块进行合并,以使第二内存块在下次需要分配的时候可以直接使用,减小了内存合并与分割的次数,有效减少了碎片化内存的产生,提高了内存分配效率。
在上述第一方面的一种可能的实现中,该方法还包括:在基于第二数据表确定第五内存块的分配次数大于等于第二阈值的情况下,分割第六内存块得到第七内存块,第六内存块为基于第一数据表确定的处于空闲状态且可使用内存大于第五内存块的可使用内存的内存块,第七内存块的可使用内存与第五内存块的可使用内存相同。
本申请实现方式中,在第五内存块的分配次数大于等于第二阈值的情况下,说明第五内存块的使用频率较高,因此分割第六内存块得到第七内存块,使得第七内存块的可使用内存与第五内存块的可使用内存相同。便于在下一次需要分配的内存与第五内存块的可使用内存相同的时候,直接将第七内存块进行分配,而不需要再进行内存块的分割,有效减少了内存分配的时间。
在上述第一方面的一种可能的实现中,该方法还包括:接收内存获取请求;根据内存获取请求,分配第一内存;按照第一预设规则将第一内存分割为多个内存块;基于多个内存块的内存块信息得到第一数据表,以及基于多个内存块的分配信息得到第二数据表,分配信息包括分配次数信息。
本申请实现方式中,基于多个内存块的内存块信息得到第一数据表和第二数据表,便于后续根据第一数据表和第二数据表中的数据查找对应的内存块。
在上述第一方面的一种可能的实现中,将第一内存块分配给内存申请请求对应的应用之后,该方法还包括:确定第一内存块的备用内存块;在备用内存块的可使用内存与第一内存块的可使用内存相同的情况下,将备用内存块的内存块信息存储至第一数据表中第一内存块的内存块信息对应的存储位置;在备用内存块的可使用内存大于第一内存块的可使用内存的情况下,根据备用内存块分割得到可使用内存与第一内存块的可使用内存相同的第八内存块,将第八内存块的内存块信息存储至第一数据表中第一内存块的内存块信息对应的存储位置。
本申请实现方式中,第一内存块分配给内存申请请求对应的应用之后,将可使用内存的与第一内存块的可使用内存相同的备用内存块或者第八内存块的内存块信息存储至第一数据表中第一内存块的内存块信息对应的存储位置,便于在下一次需要分配的内存与第一内存块的可使用内存相同的时候,直接将备用内存块或者第八内存块进行分配,而不需要再进行内存块的分割操作,有效减少了内存分配的时间。
在上述第一方面的一种可能的实现中,在接收到内存申请请求的情况下,若确定第一内存对应的多个内存块被分配完,该方法还包括:分配第二内存;以及根据第二数据表确定分配次数大于第三阈值的内存块,并且确定分配次数大于第三阈值的内存块的可使用内存为第二数值;确定第一内存对应的内存块中,可使用内存为第二数值的内存块的第一数量;根据第二数值和第一数量将第二内存分割为多个内存块,以得到第二数量的第九内存块,第九内存块的可使用内存为第二数值,且第二数量大于第一数量。
本申请实现方式中,在第一内存对应的多个内存块被分配完的情况下,分配第二内存,并根据分配次数大于第三阈值的内存块的可使用内存的第二数值和可使用内存为第二数值的内存块的第一数量将第二内存分割为多个内存块,并使得多个内存块中包括多个可使用内存为第二数值的第九内存块,且第二数量大于第一数量。第九内存块的分配次数大于第三阈值,说明可使用内存为第二数值的内存块的使用频率很高,因此在对第二内存进行分割的时候,分割出更多的可使用内存为第二数值的第九内存块,以便在后续内存分配的时候,降低内存块的分割操作次数,有效减少了内存分配的时间,提高了内存分配效率。
在上述第一方面的一种可能的实现中,内存块包括内存头结构和可使用内存,内存块信息还包括内存头结构。
在上述第一方面的一种可能的实现中,内存头结构包括:前内存块头地址、后内存块头地址、内存块大小、内存块状态、内存块地址、前相同大小内存块头地址和后相同大小内存块头地址。
本申请实现方式中,在内存头结构中存储前内存块头地址、后内存块头地址、内存块大小、内存块状态、内存块地址、前相同大小内存块头地址和后相同大小内存块头地址,便于在内存进行分配的时候,根据第一数据表中的内存块信息查找需要的内存块。
第二方面,本申请的实施方式提供了一种内存管理装置,用于执行上述第一方面描述的内存管理方法,该装置包括:第一处理模块,用于在接收到内存申请请求的情况下,基于第一数据表确定第一内存块,并将第一内存块分配给内存申请请求对应的应用,第一内存块为基于第一数据表确定的处于空闲状态且可使用内存大于内存申请请求所请求内存的内存块,第一数据表中存储有处于空闲状态的内存块的内存块信息,内存块信息包括可使用内存信息和地址信息;第二处理模块,用于在接收到内存释放请求的情况下,基于第二数据表确定内存释放请求对应的第二内存块的分配次数,在分配次数大于等于第一阈值的情况下,释放第二内存块的内存,并将第二内存块的内存块信息存储至第一数据表中,在分配次数小于第一阈值的情况下,释放第二内存块的内存,将第二内存块与第三内存块合并得到第四内存块,并将第四内存块的内存块信息存储至第一数据表中,第三内存块为基于第一数据表确定的处于空闲状态且地址与第二内存块的地址相邻的内存块,第二数据表中存储有内存块的分配次数信息。
第三方面,本申请的实施方式提供了一种电子设备,包括:存储器,用于存储计算机程序,计算机程序包括程序指令;处理器,用于执行程序指令,以使电子设备执行上述第一方面和/或第一方面的任意一种可能的实现方式所提供的内存管理方法。
第四方面,本申请的实施方式提供了一种计算机可读取存储介质,计算机可读取存储介质存储有计算机程序,计算机程序包括程序指令,程序指令被电子设备运行以使执行上述第一方面和/或第一方面的任意一种可能的实现方式所提供的内存管理方法。
第五方面,本申请的实施方式提供了一种计算机程序产品,包括计算机程序/指令,计算机程序/指令被处理器执行时实现上述第一方面和/或第一方面的任意一种可能的实现方式所提供的内存管理方法。
本申请有益效果:
本申请提供的内存管理方法,在接收到内存申请请求的情况下,将处于空闲状态且可使用内存大于内存申请请求所请求内存的第一内存块分配给内存申请请求对应的应用,使得分配的内存块肯定能够满足内存申请请求对应的应用使用,避免了在分配内存的过程中需要遍历整个第一数据表查找可使用内存与内存申请请求所请求内存的大小一样的内存块而花费大量的时间,有效减少了内存分配需要的时间。
在接收到内存释放请求的情况下,在根据第二数据表确定内存释放请求对应的第二内存块的分配次数大于第一阈值的情况下,说明第二内存块的使用频率比较高。因此,释放第二内存块的内存,并将第二内存块的内存块信息存储至第一数据表中,将第二内存块不与其它内存块进行合并,以使第二内存块在下次需要分配的时候可以直接使用,减小了内存合并与分割的次数,有效减少了碎片化内存的产生,提高了内存分配效率。
附图说明
为了更清楚地说明本申请的技术方案,下面将对实施方式描述中所使用的附图作简单介绍。
图1是根据本申请的一些实现方式,示出的一种内存块头结构的示意图;
图2是根据本申请的一些实现方式,示出的一种内存管理方法的流程示意图;
图3是根据本申请的一些实现方式,示出的一种将内存分割成多个内存块的示意图;
图4是根据本申请的一些实现方式,示出的一种分割内存块与备用内存块的示意图;
图5是根据本申请的一些实现方式,示出的另一种内存管理方法的流程示意图;
图6是根据本申请的一些实现方式,示出的一种在确定第一内存对应的多个内存块被分配完,分配第二内存的流程示意图;
图7是根据本申请的一些实现方式,示出的一种内存池头结构的示意图;
图8是根据本申请的一些实现方式,示出的一种内存管理装置的示意图;
图9是根据本申请的一些实现方式,示出的一种电子设备的结构示意图。
具体实施方式
下面将结合附图对本申请的技术方案作进一步详细描述。
如前所述,现有的实时系统的内存分配,存在内存分配时间不确定,即有时候内存分配需要的时间过长,以及会产生很多碎片化内存,造成内存浪费的问题。
基于此,本申请提供了一种内存管理方法,在内存的分配过程中,能够根据内存块的使用情况,实时调整内存块的大小和调整内存块的分割与合并策略,有效减少了碎片化内存的产生,提高了内存分配效率,并且采用提级分配方式,有效减少了内存分配需要的时间。
接下来,参考附图1-附图7,详细描述本申请的内存管理方法的实施过程以及优点。
在本申请的一种实现方式中,该内存管理方法包括:
在接收到内存申请请求的情况下,基于第一数据表确定第一内存块,并将第一内存块分配给内存申请请求对应的应用。
其中,第一内存块为基于第一数据表确定的处于空闲状态且可使用内存大于内存申请请求所请求内存的一个内存块,第一数据表中存储有处于空闲状态的内存块的内存块信息,内存块信息包括可使用内存信息和地址信息。
可使用内存信息(也即可使用内存的大小),指的是当前内存块能够存储或者处理的数据的最大容量。地址信息则是用于定位内存块的标志。通过第一数据表中的内存块信息,能够准确地查找到内存申请请求所请求内存所需要的内存块。
需要说明的是,第一内存块为处于空闲状态且可使用内存大于内存申请请求所请求内存的一个内存块。如此,可以使得分配的内存块能够满足内存申请请求对应的应用使用,有效减少了内存分配需要的时间。
在本申请的一种实现方式中,为了使得第一内存块的内存大小既能符合内存要求,又不会造成内存的浪费,可以选择可使用内存最接近且大于申请请求所请求内存的第一内存块。比如,申请请求所请求内存为2
在本申请的一种实现方式中,内存块包括内存头结构和可使用内存,第一数据表中的内存块信息还包括内存头结构。第一数据表也可以称为空闲内存链表,用于管理空闲内存块的表头(也即内存块信息),能够简化查找定位空闲内存块的过程。
在本申请的一种实现方式中,如图1所示,内存头结构包括:前内存块头地址、后内存块头地址、内存块大小(即可使用内存信息)、内存块状态、内存块地址、前相同大小内存块头地址和后相同大小内存块头地址。
在接收到内存释放请求的情况下,基于第二数据表确定内存释放请求对应的第二内存块的分配次数,在分配次数大于等于第一阈值的情况下,释放第二内存块的内存,并将第二内存块的内存块信息存储至第一数据表中,在分配次数小于第一阈值的情况下,释放第二内存块的内存,将第二内存块与第三内存块合并得到第四内存块,并将第四内存块的内存块信息存储至第一数据表中,第三内存块为基于第一数据表确定的处于空闲状态且地址与第二内存块的地址相邻的内存块,第二数据表中存储有内存块的分配次数信息。
需要说明的是,本申请中的内存块,是在接收内存获取请求之后,根据内存获取请求先分配第一内存(该第一内存也可以称为第一内存池),然后对第一内存进行分割得到的。因此,在接收到内存释放请求的情况下,对内存块的内存进行释放,可以是将内存块的内存释放给第一内存(也即第一内存池)的,而不是释放给系统。
第一阈值可以为1,也可以为大于1的数值,本申请不进行具体的限制。
其中,将第二内存块的内存块信息存储至第一数据表中,可以是将第二内存块的内存块信息插入到第一数据表的最后,也可以是插入到第二内存块在空闲状态时,其内存块信息在第一数据表中的存储位置,也可以是其他的位置,在此并不进行限制。
将第二内存块与第三内存块合并得到第四内存块时,第三内存块可以是处于空闲状态且内存块地址与第二内存块的前内存块地址相同的内存块,第三内存块也可以是处于空闲状态且内存块地址与第二内存块的后内存块地址相同的内存块。第四内存块的内存块信息的存储位置则可以是第二内存块的内存块信息在第一数据表中的存储位置,也可以是第三内存块的内存块信息在第一数据表中的存储位置,或者也可以重新确定第四内存块的内存块信息在第一数据表中的存储位置。
该内存管理方法,在接收到内存申请请求的情况下,将处于空闲状态且可使用内存大于内存申请请求所请求内存的第一内存块分配给内存申请请求对应的应用,使得分配的内存块肯定能够满足内存申请请求对应的应用使用,避免了在分配内存的过程中需要遍历整个第一数据表查找可使用内存与内存申请请求所请求内存的大小一样的内存块而花费大量的时间,有效减少了内存分配需要的时间。
在接收到内存释放请求的情况下,在根据第二数据表确定内存释放请求对应的第二内存块的分配次数大于第一阈值的情况下,说明第二内存块的使用频率比较高。因此,释放第二内存块的内存,并将第二内存块的内存块信息存储至第一数据表中,将第二内存块不与其它内存块进行合并,以使第二内存块在下次需要分配的时候可以直接使用,减小了内存合并与分割的次数,有效减少了碎片化内存的产生,提高了内存分配效率。
在进行内存块的分配和释放前,需要根据接收的内存获取请求,将一个大的内存分割成多个内存块。在本申请的一种实现方式中,该方法包括如下步骤:
S100:接收内存获取请求。
S200:根据内存获取请求,分配第一内存。
S300:按照第一预设规则将第一内存分割为多个内存块。
S400:基于多个内存块的内存块信息得到第一数据表,以及基于多个内存块的分配信息得到第二数据表。其中,分配信息包括分配次数信息。
在一般情况下,电子设备的系统在执行某一应用的时候,会动态的为该应用分配一定的内存空间,以供该应用进行使用。而在第一次内存分配的时候,该应用对应的第一内存的大小,是提前预设好的,在接收到内存获取请求之后,只需要根据预设好的数值,为该应用分配第一内存即可。
在本申请的一种实现方式中,按照第一预设规则将第一内存分割为多个内存块,如图3和图4所示,包括:
根据一级索引将第一内存按照2的次幂进行粗分,分为:2^5、2^6、……2^31,每一个内存块对应位图标记(即bitmap)中的一个位。
然后,根据二级索引按照规定的间隔对粗分得到的每一个内存块进行细分,假设配置间隔个数为8,则将粗分得到的每一个内存块平均分为8个区间。比如,将2^5~2^6大小的内存块分为(32~35),(36~39),(40~43),(44~47),(48~51),(52~55),(56~59),(60~63)这几个区间,每一区间对应bitmap中的一个位。
通过一级索引和二级索引创建索引链表,当索引链表中对应的内存块为空闲时,对应的bitmap中的位置1,反之置0。
在利用一级索引和二级索引对第一内存进行分割,得到的多个内存块,包括了内存块头和可用内存块,然后将内存块的内存块信息存储至第一数据表中。需要说明的是,第一数据表中存储的内存块信息均为空闲内存块的内存块信息,当任一内存块被分配之后,该内存块对应的内存块信息则从第一数据表中删除,在该内存块的内存被释放之后,其对应的内存块信息才会再次存储至第一数据表。而第一数据表则是根据索引链表中内存块对应的bitmap值,来确定内存块是否为空闲状态的。
在本申请的一种实现方式中,只有内存块对应的一级索引和二级索引的bitmap均为1的时候,说明该内存块处于空闲状态。
在本申请的一种实现方式中,将第一内存块分配给内存申请请求对应的应用之后,该方法还包括:
确定第一内存块的备用内存块。
在备用内存块的可使用内存与第一内存块的可使用内存相同的情况下,将备用内存块的内存块信息存储至第一数据表中第一内存块的内存块信息对应的存储位置。
在备用内存块的可使用内存大于第一内存块的可使用内存的情况下,根据备用内存块分割得到可使用内存与第一内存块的可使用内存相同的第八内存块,将第八内存块的内存块信息存储至第一数据表中第一内存块的内存块信息对应的存储位置。
具体地,如图4所示,在本申请的一种实现方式中,根据一级索引将第一内存进行粗分得到的多个内存块之后,为每个内存块还分配备用内存块。需要说明的是,每一个内存块对应的备用内存块的数量可以为一个,也可以为两个、三个,或者根据需要进行设定即可。每一个内存块对应的备用内存块可使用内存的大小与该内存块的可使用内存大小可以相同,也可以不同。图4中的0-7对应的内存块,则是通过二级索引将通过一级索引分割得到的内存块进行细分之后,得到的内存块(图中以分割间隔为8进行举例)。
在内存块对应的备用内存块可使用内存大于该内存块的可使用内存的情况下,需要对备用内存块进行分割,得到可使用内存与第一内存块的可使用内存相同的第八内存块。此时,若内存块对应的备用内存块可使用内存为该内存块的可使用内存的倍数,则可以将备用内存块分割为多个第八内存块。若内存块对应的备用内存块可使用内存与该内存块的可使用内存不成倍数关系,则从备用内存块中分割得到第二内存块,再将备用内存块剩下的部分划分为其他内存块。
在本申请的一种实现方式中,根据一级索引分割得到的内存块对应的备用内存块可使用内存为该内存块的可使用内存的倍数。比如,根据一级索引分割得到的内存块对应的可使用内存为2
在本申请的一种实现方式中,如图5所示,该内存管理方法包括如下步骤:
S100’:接收内存获取请求。
S200’:根据内存获取请求,分配第一内存。
S300’:按照第一预设规则将第一内存分割为多个内存块。
S400’:基于多个内存块的内存块信息得到第一数据表和第二数据表。
S500’:在接收到内存申请请求的情况下,基于第一数据表确定第一内存块,并将第一内存块分配给内存申请请求对应的应用,第一内存块为基于第一数据表确定的处于空闲状态且可使用内存大于内存申请请求所请求内存的一个内存块,第一数据表中存储有处于空闲状态的内存块的内存块信息,内存块信息包括可使用内存信息和地址信息。
在接收到内存释放请求的情况下,基于第二数据表确定内存释放请求对应的第二内存块的分配次数,在分配次数大于等于第一阈值的情况下,释放第二内存块的内存,并将第二内存块的内存块信息存储至第一数据表中,在分配次数小于第一阈值的情况下,释放第二内存块的内存,将第二内存块与第三内存块合并得到第四内存块,并将第四内存块的内存块信息存储至第一数据表中,第三内存块为基于第一数据表确定的处于空闲状态且地址与第二内存块的地址相邻的内存块,第二数据表中存储有内存块的分配次数信息。
在本申请的一种实现方式中,在接收到内存申请请求的情况下,若确定第一内存对应的多个内存块被分配完,如图6所示,该方法还包括如下步骤:
S510:分配第二内存。
S520:根据第二数据表确定分配次数大于第三阈值的内存块,并且确定分配次数大于第三阈值的内存块的可使用内存为第二数值。
S530:确定第一内存对应的内存块中,可使用内存为第二数值的内存块的第一数量。
S540:根据第二数值和第一数量将第二内存分割为多个内存块,以得到第二数量的第九内存块,第九内存块的可使用内存为第二数值,且第二数量大于第一数量。
第二内存的大小可以和第一内存的大小相同,也可以不同。第三阈值是预先设定的一个数值,用来衡量内存块的使用频率的高低,当可使用内存的大小为第二数值的内存块的分配次数大于第三阈值的时候,说明在当前内存的使用过程中,该种内存块的使用率高。因此,在对第二内存进行分割的时候,会多分出来一些可使用内存为第二数值的第九内存块,以用于后续的分配使用,提高了内存分配的效率。
具体地,第一内存和第二内存也可以称为第一内存池和第二内存池,为了记录内存池分割得到的内存块的信息以及扩展内存池的信息,如图7所示,每一个内存池也设置了对应的内存池头结构,内存池头结构中包括扩展内存池地址、二维索引链表、空闲内存块数组和内存块分配记录表。其中,对于第一内存来说,其对应的扩展内存池地址则指的是第二内存的地址,二维索引链表指的是上述的一级索引和二级索引以及对应的bitmap值组成的表格,空闲内存块数组也即上述的第一数据表,内存块分配记录表也即上述的第二数据表。
在本申请的一种实现方式中,该方法还包括:在基于第二数据表确定第五内存块的分配次数大于等于第二阈值的情况下,分割第六内存块得到第七内存块,第六内存块为基于第一数据表确定的处于空闲状态且可使用内存大于第五内存块的可使用内存的内存块,第七内存块的可使用内存大小与第五内存块的可使用内存大小相同。
第二阈值为预先设置的一个数值,具体的大小本申请不进行限制。第二阈值是对内存块的使用情况的一个标定值,代表了某一大小的内存块的使用频率。因此,在本申请的一种实现方式中,该方法还包括:在第一预设时间内,若基于第二数据表确定第五内存块的分配次数大于等于第二阈值的情况下,则分割第六内存块得到第七内存块。
其中,第一预设时间可以为5分钟、6分钟、8分钟或者其他设定好的时间。
其中,第六内存块为处于空闲状态且可使用内存大于第五内存块的可使用内存的内存块,第六内存块的可使用内存可以为第五内存块可使用内存的倍数,也可以与第五内存块可使用内存不成倍数关系。在第六内存块的可使用内存可以为第五内存块可使用内存的倍数的时候,可以将第六内存块分割为多个相同的可使用内存与第五内存块可使用内存小相同的内存块。在第六内存块的可使用内存与第五内存块可使用内存不成倍数关系的时候,分割第六内存块得到第七内存块,然后将第六内存块中剩余的部分分割为其他内存块。进一步地,为了保证第六内存块在被分割之后,对于后续的内存使用没有影响,因此会选择使用频率较低的第六内存块进行分割。
在本申请的一种实现方式中,本申请提供的内存管理方法,也可以称为一种适合实时系统的动态内存分配方法,使用一个空闲内存链表(即第一数据表)来管理空闲内存块的表头(即内存块信息),简化了查找定位空闲内存块的过程。
使用一个数组(即第二数据表)来记录最近分配的内存块,分别记录内存块的大小和该大小分配的次数。根据内存分配记录表,提供了一个高频内存块自调节增加机制,提高使其在实时系统中的分配效率。
提供了一个备用内存块机制,可以及时去填补已经分配的内存块,提高内存在实时系统中的分配效率。
提供了一个内存自学习初始化机制,提高了内存在实时系统中的分配效率。
使用了提级分配方式,即在申请某个大小的内存时,先从比该大小大一级的区间查找是否有空闲,保证了分配时间的确定性。
根据分配频率去调节分割合并操作,即在释放内存时,如果最近分配记录中有该大小内存的分配记录,则先不进行合并,直接放入空闲链表,减少了内存碎片。
请参见图8,图8所示为本申请的一种内存管理装置,用于执行如上所述的内存管理方法,该装置包括:
第一处理模块,用于在接收到内存申请请求的情况下,确定第一内存块,并将第一内存块分配给内存申请请求对应的应用,第一内存块为基于第一数据表确定的处于空闲状态且可使用内存大于内存申请请求所请求内存的一个内存块,第一数据表中存储有处于空闲状态的内存块信息,内存块信息包括可使用内存信息和地址信息。
第二处理模块,用于在接收到内存释放请求的情况下,通过第二数据表确定内存释放请求对应的第二内存块的分配次数,在分配次数大于等于第一阈值的情况下,释放第二内存块的内存,并将第二内存块的内存块信息存储至第一数据表中,在分配次数小于第一阈值的情况下,释放第二内存块的内存,将第二内存块与第三内存块合并得到第四内存块,并将第四内存块的内存块信息存储至第一数据表中,第三内存块为基于第一数据表确定的处于空闲状态且地址与第二内存块的地址相邻的内存块,第二数据表中存储有内存块的分配信息。
各个处理模块能够进行的具体操作内容参见上述图2对应的内存管理方法。并且,根据上述内存管理方法具体操作步骤,数据处理装置可以包括更多或者更少的处理模块,用于处理上述内存管理方法中的内容。
请参见图9,图9所示为本申请实现方式提供的电子设备的一种结构框图。电子设备可以包括一个或多个处理器1002,与处理器1002中的至少一个连接的系统控制逻辑1008,与系统控制逻辑1008连接的系统内存1004,与系统控制逻辑1008连接的非易失性存储器(non-volatile memory,NVM)1006,以及与系统控制逻辑1008连接的网络接口1010。
处理器1002可以包括一个或多个单核或多核处理器。处理器1002可以包括通用处理器和专用处理器(例如,图形处理器,应用处理器,基带处理器等)的任何组合。在本文的实现方式中,处理器1002可以被配置为执行前述的内存管理方法。
在一些实现方式中,系统控制逻辑1008可以包括任意合适的接口控制器,以向处理器1002中的至少一个和/或与系统控制逻辑1008通信的任意合适的设备或组件提供任意合适的接口。
在一些实现方式中,系统控制逻辑1008可以包括一个或多个存储器控制器,以提供连接到系统内存1004的接口。系统内存1004可以用于加载以及存储数据和/或指令。在一些实现方式中电子设备的系统内存1004可以包括任意合适的易失性存储器,例如合适的动态随机存取存储器(Dynamic Random Access Memory,DRAM)。
NVM/存储器1006可以包括用于存储数据和/或指令的一个或多个有形的、非暂时性的计算机可读介质。在一些实现方式中,NVM/存储器1006可以包括闪存等任意合适的非易失性存储器和/或任意合适的非易失性存储设备,例如硬盘驱动器(Hard Disk Drive,HDD),光盘(Compact Disc,CD)驱动器,数字通用光盘(Digital Versatile Disc,DVD)驱动器中的至少一个。
NVM/存储器1006可以包括安装在电子设备的装置上的一部分存储资源,或者它可以由设备访问,但不一定是设备的一部分。例如,可以经由网络接口1010通过网络访问NVM/存储器1006。
特别地,系统内存1004和NVM/存储器1006可以分别包括:指令1020的暂时副本和永久副本。指令1020可以包括:由处理器1002中的至少一个执行时导致电子设备实施前述内存管理方法的指令。在一些实现方式中,指令1020、硬件、固件和/或其软件组件可另外地/替代地置于系统控制逻辑1008,网络接口1010和/或处理器1002中。
网络接口1010可以包括收发器,用于为电子设备提供无线电接口,进而通过一个或多个网络与任意其他合适的设备(如前端模块,天线等)进行通信。在一些实现方式中,网络接口1010可以集成于电子设备的其他组件。例如,网络接口1010可以集成于处理器1002的,系统内存1004,NVM/存储器1006,和具有指令的固件设备(未示出)中的至少一种,当处理器1002中的至少一个执行所述指令时,电子设备实现前述的内存管理方法。
网络接口1010可以进一步包括任意合适的硬件和/或固件,以提供多输入多输出无线电接口。例如,网络接口1010可以是网络适配器,无线网络适配器,电话调制解调器和/或无线调制解调器。
在一个实现方式中,处理器1002中的至少一个可以与用于系统控制逻辑1008的一个或多个控制器的逻辑封装在一起,以形成系统封装(System In a Package,SiP)。在一个实现方式中,处理器1002中的至少一个可以与用于系统控制逻辑1008的一个或多个控制器的逻辑集成在同一管芯上,以形成片上系统(System on Chip,SoC)。
电子设备可以进一步包括:输入/输出(I/O)设备1012。I/O设备1012可以包括用户界面,使得用户能够与电子设备进行交互;外围组件接口的设计使得外围组件也能够与电子设备交互。在一些实现方式中,电子设备还包括传感器,用于确定与电子设备相关的环境条件和位置信息的至少一种。
在一些实现方式中,用户界面可包括但不限于显示器(例如,液晶显示器,触摸屏显示器等),扬声器,麦克风,一个或多个相机(例如,静止图像照相机和/或摄像机),手电筒(例如,发光二极管闪光灯)和键盘。
在一些实现方式中,外围组件接口可以包括但不限于非易失性存储器端口、音频插孔和电源接口。
在一些实现方式中,传感器可包括但不限于陀螺仪传感器,加速度计,近程传感器,环境光线传感器和定位单元。定位单元还可以是网络接口1010的一部分或与网络接口1010交互,以与定位网络的组件(例如,全球定位系统(Global Positioning System,GPS)卫星)进行通信。
可以理解的是,本发明实现方式示意的结构并不构成对电子设备的具体限定。在本申请另一些实现方式中,电子设备可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件,软件或软件和硬件的组合实现。
可将程序代码应用于输入指令,以执行本文描述的各功能并生成输出信息。可以按已知方式将输出信息应用于一个或多个输出设备。为了本申请实现方式的目的,处理系统包括具有诸如例如数字信号处理器(Digital Signal Processor,DSP)、微控制器、专用集成电路(Application Specific Integrated Circuit,ASIC)或微处理器之类的处理器的任何系统。
程序代码可以用高级程序化语言或面向对象的编程语言来实现,以便与处理系统通信。在需要时,也可用汇编语言或机器语言来实现程序代码。事实上,本文中描述的机制不限于任何特定编程语言的范围。在任一情形下,该语言可以是编译语言或解释语言。
至少一个实现方式的一个或多个方面可以由存储在计算机可读存储介质上的表示性指令来实现,指令表示处理器中的各种逻辑,指令在被机器读取时使得该机器制作用于执行本文所述的技术的逻辑。被称为“IP核”的这些表示可以被存储在有形的计算机可读存储介质上,并被提供给多个客户或生产设施以加载到实际制造该逻辑或处理器的制造机器中。
需要说明的是,在附图中,可以以特定布置和/或顺序示出一些结构或方法特征。然而,应该理解,可能不需要这样的特定布置和/或排序。而是,在一些实现方式中,这些特征可以以不同于说明性附图中所示的方式和/或顺序来布置。另外,在特定图中包括结构或方法特征并不意味着暗示在所有实现方式中都需要这样的特征,并且在一些实现方式中,可以不包括这些特征或者可以与其他特征组合。
需要说明的是,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
需要说明的是,在附图中,可以以特定布置和/或顺序示出一些结构或方法特征。然而,应该理解,可能不需要这样的特定布置和/或排序。而是,在一些实施方式中,这些特征可以以不同于说明性附图中所示的方式和/或顺序来布置。另外,在特定图中包括结构或方法特征并不意味着暗示在所有实施方式中都需要这样的特征,并且在一些实施方式中,可以不包括这些特征或者可以与其他特征组合。
虽然通过参照本申请的某些优选实施方式,已经对本申请进行了图示和描述,但本领域的普通技术人员应该明白,以上内容是结合具体的实施方式对本申请所作的进一步详细说明,不能认定本申请的具体实施只局限于这些说明。本领域技术人员可以在形式上和细节上对其作各种改变,包括做出若干简单推演或替换,而不偏离本申请的精神和范围。
- 多版本数据存储管理方法及装置、电子设备、存储介质
- 内存装配位置校验方法及装置、存储介质及电子设备
- 集中式密码管理方法、装置、电子设备及计算机存储介质
- 人力资源管理方法、装置、电子设备及存储介质
- 智慧门店的管理方法、装置、电子设备及计算机存储介质
- 内存管理方法、装置、存储介质及电子设备
- 配电终端内存管理方法、装置、电子设备及存储介质