一种分配内存的方法、电子设备及存储介质与流程

文档序号:35410944发布日期:2023-09-09 22:10阅读:20来源:国知局
一种分配内存的方法、电子设备及存储介质与流程

本技术涉及电子,特别涉及一种分配内存的方法、电子设备及存储介质。


背景技术:

1、作为电子设备的存储空间,内存是电子设备不可或缺的组成部分。内存是以页框为单位的,当电子设备的程序需要申请内存以运行时,电子设备为待运行的程序分配连续的空闲页框,而待运行的程序运行结束后又会释放内存,从而电子设备在使用一段时间后,内存中一段连续的页框内会有零散的一些正在使用的页框,导致空闲页框被分隔形成内存碎片,内存中缺乏连续空闲页框组成的较大区域,在下一次申请较大的内存时,可能存在申请时间过长的问题。

2、为了解决碎片化问题,电子设备可以对内存碎片进行整理,将一些正在使用的页框进行移动,从而使空闲的页框相连组成的较大的可申请区域,但是很多正在使用的页框是不能移动的,导致目前内存碎片整理的效率较低。


技术实现思路

1、本技术提供了一种分配内存的方法、电子设备及存储介质,能够提高内存碎片整理的效率。所述技术方案如下:

2、第一方面,本技术实施例提供了一种分配内存的方法,该方法应用于电子设备,电子设备的内存区域包括第一区域和第二区域,第一区域的终止地址位于第二区域的起始地址之前,上述方法包括:

3、根据第一进程,在第一区域为第一进程分配内存区间,第一进程对应的内存区间是可移动的;或者,

4、根据第一进程,在第二区域为第一进程分配内存区间,第一进程对应的内存区间是不可移动的。

5、根据本技术提供的方法对内存进行分配后,第一区域中的内存区间是可移动的,第二区域中的内存区间是不可移动的。由于第一区域的终止地址位于第二区域的起始地址之前,也就是说,第一区域位于头部,第二区域位于尾部,因此,在对内存碎片进行整理的时候,头部区域有大量的可移动的页框,从而可以加快在头部扫描到可移动的页框的速度,快速获得连续的页框,提高碎片整理的效率。

6、其中,终止地址和起始地址均指的是物理地址。第一区域和第二区域均为连续的内存区域。第一区域的大小和第二区域的大小可以根据手机历史使用情况确定。

7、第一区域可以包括多个子区域,第二区域同样可以包括多个子区域。在分配内存时,对于内存区间是可移动的,申请的内存大小小于或等于第一阈值的情况,在第一区域中从靠后的子区域向靠前的子区域逐次选择子区域为第一进程分配内存区间,对于申请的内存大小大于第一阈值的情况,在第一区域中从靠前的子区域向靠后的子区域逐次选择子区域为第一进程分配内存区间。第二区域同理。以第一区域、第二区域均包括2个子区域为例进行说明,第一区域包括第一子区域和第二子区域,第一子区域的终止地址位于第二子区域的起始地址之前,在第一进程申请的内存大小小于或等于第一阈值的情况下,在第一区域为第一进程分配的内存区间位于所述第一子区域;或者,在第一进程申请的内存大小大于第一阈值的情况下,在第一区域为第一进程分配的内存区间位于第二子区域。

8、第二区域包括第三子区域和第四子区域,第三子区域的终止地址位于第四子区域的起始地址之前,在第一进程申请的内存大小小于或等于第二阈值的情况下,在第二区域为第一进程分配的内存区间位于第三子区域;或者,在第一进程申请的内存大小大于第二阈值的情况下,在第二区域为第一进程分配的内存区间位于第四子区域。

9、其中,第一阈值与第二阈值可以是相同的。第一子区域、第二子区域、第三子区域和第四子区域均为连续的内存区域。本技术实施例将内存区域分成多个子区域,考虑到第一进程所申请的内存区间的大小,第一子区域、第三子区域优先分配给所需内存区间大小较小的进程,第二子区域、第四子区域优先分配给所需内存区间较大的进程。

10、由于第四子区域位于内存区域的尾部,优先分配给所需内存区间较大且内存区间不可移动的进程,因此内存区域的尾部容易产生内存碎片,例如,在第四子区域为第一进程分配了一个大小为3阶的内存区间,该内存区间释放之后,如果没有与其他内存区间合并为更大的内存区间,这部分内存区间可以分配的大小为3阶及3阶以下,无法分配给所需大小为3阶之上的进程,则这部分内存区间很容易成为空闲页;此外,如果将所需内存区间较小的进程优先分配在第四子区域,则内存区间释放之后,很容易被下一个进程占用,导致第四子区域被占用的密集度很高;因此,尾部优先分配给所需内存区间较大的进程,在内存尾部由于碎片化容易获取到空闲内存,从而由于提高了碎片整理时尾部扫描到空闲页的效率。

11、考虑到子区域的连续内存可能不满足第一进程的需求,在某一优先分配区域没有获取到内存区间时,电子设备按照可移动性的优先分配关系,在同类型的其他子区域中获取内存区间。若同类型的其他子区域中没有足够的内存区间,按照内存区间大小的优先分配关系和进程所需内存区间的大小,在其他类型的子区域中获取内存区间。

12、在一种实现方式中,第一进程对应的内存区间是可移动的,在第一进程申请的内存大小小于或等于第一阈值的情况下,并且,第一子区域中剩余的连续内存的大小大于或者等于第一进程所需的内存大小,为第一进程分配的内存区间位于第一子区域;在第一进程申请的内存大小小于或等于第一阈值的情况下,并且,第一子区域中剩余的连续内存的大小小于第一进程所需的内存大小,并且,第二子区域中剩余的连续内存的大小大于或者等于第一进程所需的内存大小,为第一进程分配的内存区间位于第二子区域。

13、在第一进程申请的内存大小小于或等于第一阈值的情况下,并且,第一子区域中剩余的连续内存的大小小于第一进程所需的内存大小,并且,第二子区域中剩余的连续内存的大小小于第一进程所需的内存大小,并且,第三子区域中剩余的连续内存的大小大于或者等于第一进程所需的内存大小,为第一进程分配的内存区间位于第三子区域。

14、在第一进程申请的内存大小小于或等于第一阈值的情况下,并且,第一子区域中剩余的连续内存的大小小于第一进程所需的内存大小,并且,第二子区域中剩余的连续内存的大小小于第一进程所需的内存大小,并且,第三子区域中剩余的连续内存的大小小于第一进程所需的内存大小,并且,第四子区域中剩余的连续内存的大小大于或者等于第一进程所需的内存大小,为第一进程分配的内存区间位于第四子区域。

15、在一种实现方式中,第一进程对应的内存区间是可移动的,在第一进程申请的内存大小大于第一阈值的情况下,并且,第二子区域中剩余的连续内存的大小大于或者等于第一进程所需的内存大小,为第一进程分配的内存区间位于第二子区域;在第一进程申请的内存大小大于第一阈值的情况下,并且,第二子区域中剩余的连续内存的大小小于第一进程所需的内存大小,并且,第一子区域中剩余的连续内存的大小大于或者等于第一进程所需的内存大小,为第一进程分配的内存区间位于第一子区域。

16、在第一进程申请的内存大小大于第一阈值的情况下,并且,第二子区域中剩余的连续内存的大小小于第一进程所需的内存大小,并且,第一子区域中剩余的连续内存的大小小于第一进程所需的内存大小,并且,第四子区域中剩余的连续内存的大小大于或者等于第一进程所需的内存大小,为第一进程分配的内存区间位于第四子区域。

17、在第一进程申请的内存大小大于第一阈值的情况下,并且,第二子区域中剩余的连续内存的大小小于第一进程所需的内存大小,并且,第一子区域中剩余的连续内存的大小小于第一进程所需的内存大小,并且,第四子区域中剩余的连续内存的大小小于第一进程所需的内存大小,并且,第三子区域中剩余的连续内存的大小大于或者等于第一进程所需的内存大小,为第一进程分配的内存区间位于第三子区域。

18、在一种实现方式中,第一进程对应的内存区间是不可移动的,在第一进程申请的内存大小小于或等于第二阈值的情况下,并且,第三子区域中剩余的连续内存的大小大于或者等于第一进程所需的内存大小,为第一进程分配的内存区间位于第三子区域;在第一进程申请的内存大小小于或等于第二阈值的情况下,并且,第三子区域中剩余的连续内存的大小小于第一进程所需的内存大小,并且,第四子区域中剩余的连续内存的大小大于或者等于第一进程所需的内存大小,为第一进程分配的内存区间位于第四子区域。

19、在第一进程申请的内存大小小于或等于第二阈值的情况下,并且,第三子区域中剩余的连续内存的大小小于第一进程所需的内存大小,并且,第四子区域中剩余的连续内存的大小小于第一进程所需的内存大小,并且,第一子区域中剩余的连续内存的大小大于或者等于第一进程所需的内存大小,为第一进程分配的内存区间位于第一子区域。

20、在第一进程申请的内存大小小于或等于第二阈值的情况下,并且,第三子区域中剩余的连续内存的大小小于第一进程所需的内存大小,并且,第四子区域中剩余的连续内存的大小小于第一进程所需的内存大小,并且,第一子区域中剩余的连续内存的大小小于第一进程所需的内存大小,并且,第二子区域中剩余的连续内存的大小大于或者等于第一进程所需的内存大小,为第一进程分配的内存区间位于第二子区域。

21、在一种实现方式中,第一进程对应的内存区间是不可移动的,在第一进程申请的内存大小大于第二阈值的情况下,并且,第四子区域中剩余的连续内存的大小大于或者等于第一进程所需的内存大小,为第一进程分配的内存区间位于第四子区域;在第一进程申请的内存大小大于第二阈值的情况下,并且,第四子区域中剩余的连续内存的大小小于第一进程所需的内存大小,并且,第三子区域中剩余的连续内存的大小大于或者等于第一进程所需的内存大小,为第一进程分配的内存区间位于第三子区域。

22、在第一进程申请的内存大小大于第二阈值的情况下,并且,第四子区域中剩余的连续内存的大小小于第一进程所需的内存大小,并且,第三子区域中剩余的连续内存的大小小于第一进程所需的内存大小,并且,第二子区域中剩余的连续内存的大小大于或者等于第一进程所需的内存大小,为第一进程分配的内存区间位于第二子区域。

23、在第一进程申请的内存大小大于第二阈值的情况下,并且,第四子区域中剩余的连续内存的大小小于第一进程所需的内存大小,并且,第三子区域中剩余的连续内存的大小小于第一进程所需的内存大小,并且,第二子区域中剩余的连续内存的大小小于第一进程所需的内存大小,并且,第一子区域中剩余的连续内存的大小大于或者等于第一进程所需的内存大小,为第一进程分配的内存区间位于第一子区域。

24、在没有获取到内存区间的情况下,电子设备对内存碎片进行整理,由于本技术分配内存的方法提高了内存碎片整理的效率,进程申请内存的时间缩短,进一步优化了内存申请的效率。

25、第二方面,本技术实施例提供一种电子设备,包括:一个或多个处理器;一个或多个存储器;存储器存储有一个或多个程序,当一个或者多个程序被处理器执行时,使得电子设备执行上述第一方面任一项可能的方法。

26、第三方面,本技术实施例提供了一种装置,该装置包含在电子设备中,该装置具有实现上述各方面及上述各方面的可能实现方式中电子设备行为的功能。功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。硬件或软件包括一个或多个与上述功能相对应的模块或单元。例如,显示模块或单元、检测模块或单元、处理模块或单元等。

27、第四方面,本技术实施例提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述第一方面所述的方法。

28、第五方面,本技术实施例提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面所述的方法。

29、上述第二方面、第三方面、第四方面和第五方面所获得的技术效果与上述第一方面中对应的技术手段获得的技术效果近似,在这里不再赘述。

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