内存管理方法、装置、电子设备及存储介质与流程

文档序号:36247539发布日期:2023-12-02 14:11阅读:16来源:国知局
内存管理方法与流程

本技术涉及内存管理,特别涉及一种内存管理方法、装置、电子设备及存储介质。


背景技术:

1、现有的实时系统的内存分配,是使用例如c函数库(比如glibc)中的malloc函数进行分配的。malloc函数分配过程为:在内存的动态存储区中分配一个长度为size的连续空间,当内存不再使用时,则将闲置的内存块释放,把动态申请的内存返还给系统。但是malloc分配算法比较复杂,需要的动态内存的大小不同,每一次对应的分配过程中的分配时间不定。并且,动态内存分配是一个不断申请内存和释放内存的过程,在此过程中需要进行指针对齐,以实现内存对齐,而内存对齐会产生很多的碎片化内存,造成了内存的浪费。因此,现有的内存管理方法,存在内存分配时间不确定,即有时候内存分配需要的时间过长,以及会产生很多碎片化内存,造成内存浪费的问题。


技术实现思路

1、本技术提供了一种内存管理方法,在内存的分配过程中,能够根据内存块的使用情况,实时调整内存块的大小和调整内存块的分割与合并策略,有效减少了碎片化内存的产生,提高了内存分配效率,并且采用提级分配方式,有效减少了内存分配需要的时间。

2、为解决上述技术问题,第一方面,本技术的实施方式提供了一种内存管理方法,该方法包括:在接收到内存申请请求的情况下,基于第一数据表确定第一内存块,并将第一内存块分配给内存申请请求对应的应用,第一内存块为基于第一数据表确定的处于空闲状态且可使用内存大于内存申请请求所请求内存的一个内存块,第一数据表中存储有处于空闲状态的内存块的内存块信息,内存块信息包括可使用内存信息和地址信息;在接收到内存释放请求的情况下,基于第二数据表确定内存释放请求对应的第二内存块的分配次数,在分配次数大于等于第一阈值的情况下,释放第二内存块的内存,并将第二内存块的内存块信息存储至第一数据表中,在分配次数小于第一阈值的情况下,释放第二内存块的内存,将第二内存块与第三内存块合并得到第四内存块,并将第四内存块的内存块信息存储至第一数据表中,第三内存块为基于第一数据表确定的处于空闲状态且地址与第二内存块的地址相邻的内存块,第二数据表中存储有内存块的分配次数信息。

3、本技术实现方式中,在接收到内存申请请求的情况下,将处于空闲状态且可使用内存大于内存申请请求所请求内存的第一内存块分配给内存申请请求对应的应用,使得分配的内存块肯定能够满足内存申请请求对应的应用使用,避免了在分配内存的过程中需要遍历整个第一数据表查找可使用内存与内存申请请求所请求内存的大小一样的内存块而花费大量的时间,有效减少了内存分配需要的时间。

4、在接收到内存释放请求的情况下,在根据第二数据表确定内存释放请求对应的第二内存块的分配次数大于第一阈值的情况下,说明第二内存块的使用频率比较高。因此,释放第二内存块的内存,并将第二内存块的内存块信息存储至第一数据表中,将第二内存块不与其它内存块进行合并,以使第二内存块在下次需要分配的时候可以直接使用,减小了内存合并与分割的次数,有效减少了碎片化内存的产生,提高了内存分配效率。

5、在上述第一方面的一种可能的实现中,该方法还包括:在基于第二数据表确定第五内存块的分配次数大于等于第二阈值的情况下,分割第六内存块得到第七内存块,第六内存块为基于第一数据表确定的处于空闲状态且可使用内存大于第五内存块的可使用内存的内存块,第七内存块的可使用内存与第五内存块的可使用内存相同。

6、本技术实现方式中,在第五内存块的分配次数大于等于第二阈值的情况下,说明第五内存块的使用频率较高,因此分割第六内存块得到第七内存块,使得第七内存块的可使用内存与第五内存块的可使用内存相同。便于在下一次需要分配的内存与第五内存块的可使用内存相同的时候,直接将第七内存块进行分配,而不需要再进行内存块的分割,有效减少了内存分配的时间。

7、在上述第一方面的一种可能的实现中,该方法还包括:接收内存获取请求;根据内存获取请求,分配第一内存;按照第一预设规则将第一内存分割为多个内存块;基于多个内存块的内存块信息得到第一数据表,以及基于多个内存块的分配信息得到第二数据表,分配信息包括分配次数信息。

8、本技术实现方式中,基于多个内存块的内存块信息得到第一数据表和第二数据表,便于后续根据第一数据表和第二数据表中的数据查找对应的内存块。

9、在上述第一方面的一种可能的实现中,将第一内存块分配给内存申请请求对应的应用之后,该方法还包括:确定第一内存块的备用内存块;在备用内存块的可使用内存与第一内存块的可使用内存相同的情况下,将备用内存块的内存块信息存储至第一数据表中第一内存块的内存块信息对应的存储位置;在备用内存块的可使用内存大于第一内存块的可使用内存的情况下,根据备用内存块分割得到可使用内存与第一内存块的可使用内存相同的第八内存块,将第八内存块的内存块信息存储至第一数据表中第一内存块的内存块信息对应的存储位置。

10、本技术实现方式中,第一内存块分配给内存申请请求对应的应用之后,将可使用内存的与第一内存块的可使用内存相同的备用内存块或者第八内存块的内存块信息存储至第一数据表中第一内存块的内存块信息对应的存储位置,便于在下一次需要分配的内存与第一内存块的可使用内存相同的时候,直接将备用内存块或者第八内存块进行分配,而不需要再进行内存块的分割操作,有效减少了内存分配的时间。

11、在上述第一方面的一种可能的实现中,在接收到内存申请请求的情况下,若确定第一内存对应的多个内存块被分配完,该方法还包括:分配第二内存;以及根据第二数据表确定分配次数大于第三阈值的内存块,并且确定分配次数大于第三阈值的内存块的可使用内存为第二数值;确定第一内存对应的内存块中,可使用内存为第二数值的内存块的第一数量;根据第二数值和第一数量将第二内存分割为多个内存块,以得到第二数量的第九内存块,第九内存块的可使用内存为第二数值,且第二数量大于第一数量。

12、本技术实现方式中,在第一内存对应的多个内存块被分配完的情况下,分配第二内存,并根据分配次数大于第三阈值的内存块的可使用内存的第二数值和可使用内存为第二数值的内存块的第一数量将第二内存分割为多个内存块,并使得多个内存块中包括多个可使用内存为第二数值的第九内存块,且第二数量大于第一数量。第九内存块的分配次数大于第三阈值,说明可使用内存为第二数值的内存块的使用频率很高,因此在对第二内存进行分割的时候,分割出更多的可使用内存为第二数值的第九内存块,以便在后续内存分配的时候,降低内存块的分割操作次数,有效减少了内存分配的时间,提高了内存分配效率。

13、在上述第一方面的一种可能的实现中,内存块包括内存头结构和可使用内存,内存块信息还包括内存头结构。

14、在上述第一方面的一种可能的实现中,内存头结构包括:前内存块头地址、后内存块头地址、内存块大小、内存块状态、内存块地址、前相同大小内存块头地址和后相同大小内存块头地址。

15、本技术实现方式中,在内存头结构中存储前内存块头地址、后内存块头地址、内存块大小、内存块状态、内存块地址、前相同大小内存块头地址和后相同大小内存块头地址,便于在内存进行分配的时候,根据第一数据表中的内存块信息查找需要的内存块。

16、第二方面,本技术的实施方式提供了一种内存管理装置,用于执行上述第一方面描述的内存管理方法,该装置包括:第一处理模块,用于在接收到内存申请请求的情况下,基于第一数据表确定第一内存块,并将第一内存块分配给内存申请请求对应的应用,第一内存块为基于第一数据表确定的处于空闲状态且可使用内存大于内存申请请求所请求内存的内存块,第一数据表中存储有处于空闲状态的内存块的内存块信息,内存块信息包括可使用内存信息和地址信息;第二处理模块,用于在接收到内存释放请求的情况下,基于第二数据表确定内存释放请求对应的第二内存块的分配次数,在分配次数大于等于第一阈值的情况下,释放第二内存块的内存,并将第二内存块的内存块信息存储至第一数据表中,在分配次数小于第一阈值的情况下,释放第二内存块的内存,将第二内存块与第三内存块合并得到第四内存块,并将第四内存块的内存块信息存储至第一数据表中,第三内存块为基于第一数据表确定的处于空闲状态且地址与第二内存块的地址相邻的内存块,第二数据表中存储有内存块的分配次数信息。

17、第三方面,本技术的实施方式提供了一种电子设备,包括:存储器,用于存储计算机程序,计算机程序包括程序指令;处理器,用于执行程序指令,以使电子设备执行上述第一方面和/或第一方面的任意一种可能的实现方式所提供的内存管理方法。

18、第四方面,本技术的实施方式提供了一种计算机可读取存储介质,计算机可读取存储介质存储有计算机程序,计算机程序包括程序指令,程序指令被电子设备运行以使执行上述第一方面和/或第一方面的任意一种可能的实现方式所提供的内存管理方法。

19、第五方面,本技术的实施方式提供了一种计算机程序产品,包括计算机程序/指令,计算机程序/指令被处理器执行时实现上述第一方面和/或第一方面的任意一种可能的实现方式所提供的内存管理方法。

20、本技术有益效果:

21、本技术提供的内存管理方法,在接收到内存申请请求的情况下,将处于空闲状态且可使用内存大于内存申请请求所请求内存的第一内存块分配给内存申请请求对应的应用,使得分配的内存块肯定能够满足内存申请请求对应的应用使用,避免了在分配内存的过程中需要遍历整个第一数据表查找可使用内存与内存申请请求所请求内存的大小一样的内存块而花费大量的时间,有效减少了内存分配需要的时间。

22、在接收到内存释放请求的情况下,在根据第二数据表确定内存释放请求对应的第二内存块的分配次数大于第一阈值的情况下,说明第二内存块的使用频率比较高。因此,释放第二内存块的内存,并将第二内存块的内存块信息存储至第一数据表中,将第二内存块不与其它内存块进行合并,以使第二内存块在下次需要分配的时候可以直接使用,减小了内存合并与分割的次数,有效减少了碎片化内存的产生,提高了内存分配效率。

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