内存申请方法及相关设备技术

技术编号:35404785 阅读:29 留言:0更新日期:2022-11-03 10:57
本申请提供一种内存申请方法及相关设备,所述方法应用于电子设备,所述电子设备包括至少一个应用,所述方法包括:记录应用在第一启动过程的内存申请和释放情况;在应用的第二启动过程,当应用申请内存时,根据所用在所述第一启动过程的内存申请和释放情况,确定申请的内存是否会在第二启动过程释放,其中第二启动过程是第一启动过程之后的另一次启动过程;根据申请的内存是否会在第二启动过程释放,确定用于分配申请的内存的区域。本申请保证应用启动后占用的内存空间连续无碎片,提高了内存空间的利用率,使电子设备在有限内存空间可以运行更多应用。行更多应用。行更多应用。

【技术实现步骤摘要】
内存申请方法及相关设备


[0001]本申请涉及内存管理领域,尤其涉及一种内存申请方法及相关设备。

技术介绍

[0002]电子设备(例如手机)上通常有很多应用,在运行应用之前,需要从操作系统申请指定大小的内存池,该内存池用于应用的启动与运行时所需内存的分配。然而,现有的内存垃圾回收机制不能将应用启动过程中产生的内存碎片进行有效利用。对于内存受限的设备,初始化申请的内存池大小有限,离散的内存碎片降低了内存空间的利用率,导致可同时运行的应用数量受限。

技术实现思路

[0003]本申请实施例提供了一种内存申请方法及相关设备,能够提高内存空间的利用率。
[0004]本申请第一方面提供了一种内存申请方法,应用于电子设备,所述电子设备包括至少一个应用,所述方法包括:记录所述至少一个应用在第一启动过程的内存申请和释放情况;在所述至少一个应用的第二启动过程,当所述至少一个应用申请内存时,根据所述至少一个应用在所述第一启动过程的内存申请和释放情况,确定申请的内存是否会在所述第二启动过程释放,其中所述第二启动过程是所述第一启动过程之后的另一次启动过程;根据申请的内存是否会在所述第二启动过程释放,确定用于分配所述申请的内存的区域。
[0005]根据应用在第一启动过程的内存申请和释放情况,在应用的第二启动过程中从合适的内存空间为应用分配内存,可以保证应用启动后占用的内存空间连续无碎片,提高内存空间的利用率,使电子设备在有限内存空间可以运行更多应用。
[0006]在一些可选的实施方式中,所述记录所述至少一个应用在第一启动过程的内存申请和释放情况包括:通过内存记录表记录所述至少一个应用在所述第一启动过程的内存申请和释放情况,所述内存记录表包括内存申请序号、内存释放标记和内存地址。
[0007]内存记录表可以高效地记录应用在第一启动过程的内存申请和释放情况,方便后续利用这些信息。
[0008]在一些可选的实施方式中,所述记录所述应用在第一启动过程的内存申请和释放情况包括:通过内存申请表和内存释放表记录所述应用在第一启动过程的内存申请和释放情况,所述内存申请表包括内存申请序号和内存申请地址,所述内存释放表包括内存释放序号和内存释放地址。
[0009]内存申请表和内存释放表记录可以有效记录应用在第一启动过程的内存申请和释放情况,方便后续利用这些信息。
[0010]在一些可选的实施方式中,所述根据申请的内存是否会在所述第二启动过程释放,确定用于分配所述申请的内存的区域包括:若所述申请的内存会在所述第二启动过程释放,确定用于分配所述申请的内存的区域为所述电子设备的临时内存空间;若所述申请
的内存不会在所述第二启动过程释放,确定用于分配所述申请的内存的区域为所述电子设备的内存池。
[0011]在应用第二启动过程,对于会释放的资源,不在内存池中分配内存,而在临时内存空间分配内存,对于非释放资源,还是从内存池中分配,能够使所有未释放的内存存储在一段连续的内存空间,而临时内存空间在应用启动完成后释放掉,从而保证应用的代码、数据资源、运行堆栈等启动后未释放资源的内存空间连续且无碎片,提高内存池利用率,使得在有限内存空间可运行更多的应用。
[0012]在一些可选的实施方式中,所述方法还包括:对所述电子设备的内存池中各个应用占用的内存进行整体平移,使所述内存池中所述各个应用之间的空闲内存连续分布;对所述内存池中连续分布的空闲内存进行整合。
[0013]通过对内存池中各个应用占用的内存进行整体平移,以及对内存池中连续分布的空闲内存进行整合,可以进一步提高内存空间的利用率,解决了多应用场景下应用退出后内存池中不同应用之间产生内存碎片的技术问题。
[0014]在一些可选的实施方式中,所述对所述电子设备的内存池中各个应用占用的内存进行整体平移之前,所述方法还包括:确定所述至少一个应用在所述第一启动过程占用的内存池大小;判断所述内存池中每个空闲内存的大小是否都小于所述至少一个应用在所述第一启动过程占用的内存池大小,以及判断所述内存池中所有空闲内存的大小之和是否不小于所述至少一个应用在所述第一启动过程占用的内存池大小;若所述内存池中每个空闲内存的大小都小于所述至少一个应用在所述第一启动过程占用的内存池大小,并且所述内存池中所有空闲内存的大小之和不小于所述至少一个应用在所述第一启动过程占用的内存池大小,对所述内存池中各个应用占用的内存进行整体平移。
[0015]通过确定应用启动过程占用的内存池大小,当内存池可用内存空间足够但每个空闲内存较小而导致应用无法启动时,进行内存整理,能够在新的应用启动时对内存池中不同应用之间产生的内存碎片进行整理。
[0016]在一些可选的实施方式中,所述方法还包括:若所述内存池中所有空闲内存的大小之和小于所述至少一个应用在所述第一启动过程占用的内存池大小,发出内存申请错误提醒。
[0017]若所述内存池中所有空闲内存的大小之和小于所述至少一个应用在所述第一启动过程占用的内存池大小,表明无法通过内存碎片整理为应用申请足够的内存,此时发出内存申请错误提醒,可以便于用户及时采取措施解决内存不足的问题。
[0018]在一些可选的实施方式中,所述对所述内存池中各个应用占用的内存进行整体平移包括:计算所述内存池中每个应用对应的平移偏移量;根据所述平移偏移量对所述每个应用相关的指针变量进行修改;根据所述每个应用原来的加载首地址和平移偏移量确定所述每个应用新的加载首地址;将所述每个应用从所述原来的加载首地址拷贝到所述新的加载首地址。
[0019]当对内存池中的应用进行整体平移时,通过计算每个应用对应的平移偏移量,修改应用相关的指针变量,可以使得指针变量指向应用整体平移后正确的位置。
[0020]在一些可选的实施方式中,所述计算所述内存池中每个应用对应的平移偏移量包括:记录所述内存池中每个应用启动时的加载首地址和占用的内存池大小;根据所述内存
池中每个应用启动时的加载首地址和占用的内存池大小,计算所述平移偏移量。
[0021]内存池中每个应用启动时的加载首地址和占用的内存池大小表明应用之间的内存碎片大大小,根据内存池中每个应用启动时的加载首地址和占用的内存池大小可以准确计算每个应用的平移偏移量。
[0022]在一些可选的实施方式中,所述记录所述内存池中每个应用启动时的加载首地址和占用的内存池大小包括:将所述内存池中每个应用启动时的加载首地址和占用的内存池大小记录到从应用内存信息链表,所述应用内存信息链表中的每个链表节点对应一个应用;所述根据所述内存池中每个应用启动时的加载首地址和占用的内存池大小,计算所述内存池中每个应用对应的平移偏移量包括:逐一获取所述应用内存信息链表中的链表节点;若所述链表节点是所述应用内存信息链表的首节点,并且所述链表节点的加载首地址不等于所述内存池的首地址,确定所述链表节点对应的平移偏移量等于所述链表节点的加载首地址与所述内存池的首地址之差;若所述链表节点不是所述应用内存信息链表的首节点,并且所述链表本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种内存申请方法,应用于电子设备,所述电子设备包括至少一个应用,其特征在于,所述方法包括:记录所述至少一个应用在第一启动过程的内存申请和释放情况;在所述至少一个应用的第二启动过程,当所述至少一个应用申请内存时,根据所述至少一个应用在所述第一启动过程的内存申请和释放情况,确定申请的内存是否会在所述第二启动过程释放,其中所述第二启动过程是所述第一启动过程之后的另一次启动过程;根据所述申请的内存是否会在所述第二启动过程释放,确定用于分配所述申请的内存的区域。2.如权利要求1所述的内存申请方法,其特征在于,所述记录所述至少一个应用在第一启动过程的内存申请和释放情况包括:通过内存记录表记录所述至少一个应用在所述第一启动过程的内存申请和释放情况,所述内存记录表包括内存申请序号、内存释放标记和内存地址。3.如权利要求1所述的内存申请方法,其特征在于,所述根据申请的内存是否会在所述第二启动过程释放,确定用于分配所述申请的内存的区域包括:若所述申请的内存会在所述第二启动过程释放,确定用于分配所述申请的内存的区域为所述电子设备的临时内存空间;若所述申请的内存不会在所述第二启动过程释放,确定用于分配所述申请的内存的区域为所述电子设备的内存池。4.如权利要求1至3任一项所述的内存申请方法,其特征在于,所述方法还包括:对所述电子设备的内存池中各个应用占用的内存进行整体平移,使所述内存池中所述各个应用之间的空闲内存连续分布;对所述内存池中连续分布的空闲内存进行整合。5.如权利要求4所述的内存申请方法,其特征在于,所述对所述电子设备的内存池中各个应用占用的内存进行整体平移之前,所述方法还包括:确定所述至少一个应用在所述第一启动过程占用的内存池大小;判断所述内存池中每个空闲内存的大小是否都小于所述至少一个应用在所述第一启动过程占用的内存池大小,以及判断所述内存池中所有空闲内存的大小之和是否不小于所述至少一个应用在所述第一启动过程占用的内存池大小;若所述内存池中每个空闲内存的大小都小于所述至少一个应用在所述第一启动过程占用的内存池大小,并且所述内存池中所有空闲内存的大小之和不小于所述至少一个应用在所述第一启动过程占用的内存池大小,对所述内存池中各个应用占用的内存进行整体平移。6.如权利要求5所述的内存申请方法,其特征在于,所述方法还包括:若所述内存池中所有空闲内存的大小之和小于所述至少一个应用在所述第一启动过程占用的内存池大小,发出内存申请错误提醒。7.如权利要求4所述的内存申请方法,其特征在于,所述对所述内存池中各个应用占用的内存进行整体平移包括:计算所述内存池中每个应用对应的平移偏移量;根据所述平移偏移量对所述每个应用相关的指针变...

【专利技术属性】
技术研发人员:朱金鹏喻钢金鑫
申请(专利权)人:华为技术有限公司
类型:发明
国别省市:

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

1