掌桥专利:专业的专利平台
掌桥专利
首页

一种内存分配方法以及相关装置

文献发布时间:2023-06-19 18:32:25


一种内存分配方法以及相关装置

技术领域

本申请实施例涉及一种内存分配方法以及相关装置。

背景技术

在计算机系统中,需要对内存资源进行统筹管理,从而为应用程序申请以及释放内存。当内存的申请以及释放的频率较高时,所需要消耗的时间也就越多,为了满足应用程序高效运行的需求,需要进一步提升内存分配的效率。

目前的内存分配方案中,当应用程序申请内存的时候,可以通过数据栈向应用程序分配内存单元,当数据栈中的内存单元不足时,还可以从内存池将内存单元分配到数据栈中,从而不断满足应用程序的需求。

然而,从内存池将内存单元分配到数据栈中的过程中,数据栈无法向应用程序分配内存单元,因此内存分配效率不高。

发明内容

本申请实施例提供了一种内存分配方法以及相关装置,用于提高内存分配的效率。

本申请实施例第一方面提供了一种内存分配方法:

数据栈是一种数据结构,可以用于存储数据,在内存分配的应用场景中,可以根据数据栈存储内存资源,从而向应用程序提供内存资源。将内存资源存储在两个不同的数据栈中,包括第一数据栈以及第二数据栈。对于第一数据栈,第一数据栈指示了目标应用程序可使用的内存资源,该内存资源会随着应用程序申请或者释放内存而发生变化。当上述第一数据栈指示的内存资源更新为第一内存资源,且第一内存资源等于第一阈值,则根据第二数据栈向目标应用程序提供内存资源,其中,第二数据栈指示了目标应用程序可使用的第二内存资源,并且第二内存资源大于第一阈值。

本申请实施例中,第一阈值表示内存资源即将耗尽或者已经耗尽,因此当第一内存资源等于第一阈值时,根据第二数据栈向应用程序提供内存资源,节省了等待分配内存资源到数据栈的时间,提高了内存分配的效率。

在一种可能的实现方式中,第一内存资源以及第二内存资源包括内存单元的数量,第一数据栈的长度以及第二数据栈的长度与内存单元的数量呈正相关,第一数据栈以及第二数据栈中的内存单元的大小相同。

在一种可能的实现方式中,根据第二数据栈向目标应用程序提供内存资源之前,还可以获取第二数据栈指示的第三内存资源,以及第一数据栈指示的第四内存资源,其中,第四内存资源在损耗后会更新为第一内存资源,第三内存资源小于第二内存资源。基于第四内存资源小于或等于第二阈值且大于第一阈值,以及第三内存资源小于或等于第三阈值,为第二数据栈分配内存单元,以便将第三内存资源更新为第二内存资源,其中第二内存资源还大于第三阈值。

本申请实施例中,第二阈值以及第三阈值表示内存单元的数量已经处于不充足的状态,因此在第四内存资源更新为第一内存资源之前,为第二数据栈分配内存单元,从而为根据第二数据栈向应用程序提供内存资源做准备,提高内存分配的效率。

在一种可能的实现方式中,根据第二数据栈向目标应用程序提供内存资源之后,还可以获取第二数据栈指示的第五资源,该第五资源为第二资源经过损耗之后得到,第五资源小于第二资源。基于第五内存资源小于或等于第三阈值且大于第四阈值,以及第一内存资源小于第二阈值,为第一数据栈分配内存单元。

本申请实施例中,第四阈值表示内存资源即将耗尽或者已经耗尽,当第二数据栈中的内存单元的数量,也即第五资源处于不充足的状态,但是尚未即将耗尽或者已经耗尽时,为第一数据栈分配内存单元,从而为根据第一数据栈为应用程序提供内存资源做准备,提供内存分配的效率。

在一种可能的实现方式中,还可以获取第二数据栈指示的第六内存资源,第六内存资源为第五内存资源损耗后得到。基于第六内存资源等于第四阈值,根据第一数据栈向目标应用程序提供内存资源。

本申请实施例中,在第二数据栈的内存单元的数量即将耗尽或者已经耗尽的时候,根据第一数据栈向目标应用程序提供内存资源,提高了方案的可靠性。

在一种可能的实现方式中,可以根据硬件加速器为第一数据栈分配内存单元。

在一种可能的实现方式中,可以根据硬件加速器为第二数据栈分配内存单元。

在一种可能的实现方式中,第一阈值以及第四阈值为0。

本申请实施例第二方面提供了一种内存释放方法:

根据第一数据栈接收目标应用程序释放的内存资源,其中,第一数据栈指示了目标应用程序可使用的内存资源。当第一数据栈指示的内存资源为第七内存资源,且第七内存资源等于第五阈值时,根据第二数据栈接收目标应用程序释放的内存资源,其中,第二数据栈指示了目标应用程序可使用的第八内存资源,且该第八内存资源未使第二数据栈处于栈满状态。

本申请实施例中,第五阈值表示第一数据栈即将或者已经处于栈满状态,无法再接收内存资源,因此根据未处于栈满状态的第二数据栈接收目标应用程序释放的内存资源,从而无需先回收数据栈中的内存资源,然后再根据数据栈接收目标应用程序释放的内存资源的时间,提高了内存释放的效率。

在一种可能的实现方式中,第七内存资源以及第八内存资源包括内存单元的数量,第一数据栈的长度以及第二数据栈的长度与内存单元的数量呈正相关,第一数据栈以及第二数据栈中的内存单元的大小相同。

在一种可能的实现方式中,根据第二数据栈接收目标应用程序释放的内存资源之前,还可以获取第一数据栈指示的第九内存资源,该第九内存资源在补充了内存单元之后更新后得到上述第七内存资源,第九内存资源小于第一内存资源。基于第九内存资源大于或等于第六阈值且小于第五阈值,释放第二数据栈中的所述内存单元,以便将第二数据栈指示的第十内存资源更新为第八内存资源。

本申请实施例中,第六阈值表示第一数据栈中的内存单元的数量处于较高的水准,基于此释放第二数据栈中的内存单元,为根据第二数据栈接收目标应用程序释放的内存资源做准备,提供内存释放的效率。

在一种可能的实现方式中,根据第二数据栈接收目标应用程序释放的内存资源之后,还可以获取第二数据栈指示的第十一内存资源。随着内存单元数量的增加,第八内存资源更新后得到第十一内存资源,第十一内存资源大于第八内存资源。基于第十一内存资源大于或等于第七阈值且小于第八阈值,释放第一数据栈中的内存单元。

本申请实施例中,第七阈值表示第二数据栈中的内存单元的数量处于较高的水准,第八阈值表示即将或者已经处于栈满状态,因此释放第一数据栈中的内存单元,为根据第一数据栈接收目标应用程序释放的内存资源做准备,提高内存释放的效率。

在一种可能的实现方式中,还可以获取第二数据栈指示的第十二内存资源,随着内存单元数量的增加,第十一内存资源更新后得到第十二内存资源。基于第十二内存资源等于第八阈值,根据第一数据栈接收目标应用程序释放的内存资源。

本申请实施例中,当第二数据栈也即将或者已经处于栈满状态时,根据第一数据栈接收目标应用程序释放的内存资源,提高了方案的可靠性。

在一种可能的实现方式中,可以根据硬件加速器为第二数据栈分配内存单元。

在一种可能的实现方式中,可以根据硬件加速器为第一数据栈分配内存单元。

本申请实施例第三方面提供了一种内存分配设备,该内存分配设备包括用于实现上述第一方面中的方法对应功能的单元。

本申请实施例第四方面提供了一种内存释放设备,该内存分配设备包括用于实现上述第二方面中的方法对应功能的单元。

本申请实施例第五方面提供了一种内存处理装置,该内存处理装置包括处理器,处理器与存储器耦合,存储器用于存储指令,当指令被处理器执行时,使得装置执行上述第一方面或第二方面中的方法。

本申请实施例第五方面提供了一种计算机可读存储介质,计算机可读存储介质用于存储指令,指令用于执行第一方面或第二方面中的方法。

本申请实施例第六方面提供了一种芯片,当该芯片设置于计算机上时,使得计算机执行上述第一方面或者第二方面的方法。

附图说明

图1为本申请实施例中内存分配方法的一个应用场景示意图;

图2为本申请实施例中内存管理程序的一个架构示意图;

图3为本申请实施例中内存单元集合管理程序的一个架构示意图;

图4为本申请实施例中内存分配方法的一个原理示意图;

图5a为本申请实施例中内存分配方法的一个流程示意图;

图5b为本申请实施例中第一数据栈以及第二数据栈的阈值示意图;

图6为本申请实施例中内存分配方法的另一流程示意图;

图7为本申请实施例中内存分配方法的另一流程示意图;

图8为本申请实施例中内存分配方法的另一流程示意图;

图9为本申请实施例中内存分配方法的另一流程示意图;

图10为本申请实施例中内存分配方法的另一流程示意图;

图11为本申请实施例中内存分配设备的一个结构示意图;

图12为本申请实施例中内存分配设备的另一结构示意图;

图13为本申请实施例中内存分配设备的另一结构示意图;

图14为本申请实施例中内存释放设备的另一结构示意图;

图15为本申请实施例中内存释放设备的另一结构示意图;

图16为本申请实施例中内存释放设备的另一结构示意图;

图17为本申请实施例中内存处理装置的另一结构示意图;

图18为本申请实施例中芯片的一个结构示意图。

具体实施方式

下面结合附图,对本申请的实施例进行描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。本领域普通技术人员可知,随着技术发展和新场景的出现,本申请实施例提供的技术方案对于类似的技术问题,同样适用。

本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

本申请实施例提供了一种内存分配方法以及相关装置,用于提高内存分配的效率。

本申请实施例可以应用于如图1所示的场景中,如图1所示,应用程序的运行需要一定的内存资源,在应用程序的运行过程当中,应用程序可能会释放一部分的内存资源,或者也可能需要继续为应用程序分配一部分内存资源,为了能够保证应用程序的正常运行,及时实现内存资源的分配以及释放十分重要。

本申请实施例可以应用于通用处理器以及异构通信处理器中,本申请实施例可以通过软件的方式实现,或者也可以通过软件结合硬件加速器的方式实现,下面进行分别介绍。

下面先对本申请实施例中的内存管理程序以及内存单元集合管理程序进行介绍:

请参阅图2,图2为本申请实施例中的内存管理程序的一个架构示意图,如图2所示,对应每一个应用程序,内存管理程序都会维护一个内存单元资源池,该内存单元资源池可以为应用程序提供服务。在每个内存单元资源池中,包括至少一个内存单元子资源池,例如,在对应应用程序1的内存单元资源池中包括内存单元子资源池1以及内存单元子资源池2,在对应应用程序2的内存单元资源池中包括内存单元子资源池3以及内存单元子资源池4。其中,每个内存单元子资源池中包括第一数据栈以及第二数据栈,或者也可以包括更多的数据栈,具体此处不做限定。

第一数据栈以及第二数据栈中都包含相同大小的内存单元,在同一时刻中,由第一数据栈以及第二数据栈中的任一数据栈向应用程序提供服务。

需要说明的是,在每个内存单元资源池中,包括多种不同大小的内存单元,其中,一个内存单元子资源池中所包含的内存单元的大小是一致的。

请参阅图3,图3为本申请实施例中的内存单元集合管理程序的一个架构示意图。如图3所示,内存单元集合管理程序会维护多个内存单元集合,多个内存单元集合中包括多种不同大小的内存单元。其中,每个内存单元子集合中包含的内存单元的大小是一致的,应用程序可以根据需要从目标内存单元子集合中获取内存单元。

需要说明的是,内存单元集合管理程序可以为内存管理程序提供服务,多个内存单元集合与多个内存单元子资源池具有一一对应的关系,多个内存单元集合中的目标内存单元集合,可以为多个内存单元子资源池中的目标内存单元子资源池提供服务,例如,内存单元集合1可以为内存单元子资源池1提供服务,内存单元集合2可以为内存单元子资源池2提供服务,内存单元集合3可以为内存单元子资源池3提供服务,内存单元集合4可以为内存单元子资源池4提供服务。

可以理解的是,上述内存单元与物理内存之间存在映射关系。

请参阅图4,图4为本申请实施例中内存分配方法的实现原理示意图。如图4所示,当应用程序申请内存单元时,内存管理程序可以为应用程序分配内存单元,具体的,可以是通过内存单元子资源池中的第一数据栈或者是第二数据栈向应用程序分配内存单元;当应用程序释放内存单元时,向第一数据栈或者是第二数据栈释放内存单元。

由于在同一时刻,由第一数据栈以及第二数据栈中的其中一个数据栈为应用程序提供服务,因此,内存单元集合管理程序可以为未向应用程序提供服务的数据栈,提供内存单元的分配以及释放的服务,从而为切换数据栈为应用程序提供服务做准备,进而提高内存分配的效率。

需要说明的是,在本申请实施例中,内存单元集合管理程序可以通过软件的形式实现,或者也可以通过硬件加速器实现内存单元集合管理程序的功能,当通过硬件加速器实现内存单元集合管理程序的功能时,由硬件加速器维护上述内单元集合管理程序。

上面对内存管理程序以及内存单元集合管理程序进行了描述,下面结合上述程序对本申请实施例中的内存分配方法进行描述,在实际的情况中,应用程序可能会申请内存资源,也可能会释放内存资源,下面分别进行描述:

1)应用程序申请内存资源;

请参阅图5a,图5a为本申请实施例应用程序申请内存资源的情况下,内存分配方法的一个流程示意图:

501、根据第一数据栈向目标应用程序提供内存资源;

应用程序在运行的过程中,需要申请内存资源。示例性的,以应用程序1为例,应用程序1申请特定大小的内存资源,内存管理程序根据应用程序所需要的内存资源的大小,从目标内存单元子资源池中选取内存单元向应用程序提供,示例性的,目标内存单元子资源池可以是内存单元子资源池1。

具体的,内存管理程序从内存单元子资源池1的第一数据栈中选取内存单元,向目标应用程序提供,第一数据栈可以指示目标应用程序可用的内存资源,该内存资源具体体现为内存单元的数量。

502、基于第一内存资源等于第一阈值,根据第二数据栈向目标应用程序提供内存资源。

为了便于理解,请参阅图5b,图5b为本申请实施例中第一数据栈以及第二数据栈的阈值示意图。

在第一数据栈向应用程序提供内存资源的过程中,内存单元的数量会逐渐损耗,随着第一数据栈中的内存单元的减少,第一数据栈的长度也将逐渐减少。在某一时刻,第一数据栈指示的内存资源为第一内存资源,且第一内存资源等于第一阈值,第一阈值可以是一个很小的数值,表示内存单元的数量接近为零或者已经为零。基于此,内存管理程序根据第二数据栈向目标应用程序提供内存资源,其中,第二数据栈指示了目标应用程序此时可用的第二内存资源,该第二内存资源大于第一阈值。

优选的,第一阈值可以为0,或者第一阈值也可以是别的数值,具体此处不做限定。

本申请实施例中,当第一数据栈中的内存单元的数量严重不足时,直接根据第二数据栈向应用程序提供内存资源,从而减避免了等待内存单元分配到数据栈中再向应用程序提供内存资源的情况,提高了内存分配的效率。

上面对内存分配方法的一个实施例进行了描述,在实际的实现中,在根据第二数据栈向目标应用程序提供内存资源之前,还可以向第二数据栈中分配内存单元,从而保证第二数据栈中的内存单元的数量充足,请参阅图6,下面进行详细描述:

本实施例中步骤601与上述图5a所示实施例中步骤501类似,此处不再赘述。

602、获取第二数据栈指示的第三内存资源,以及第一数据栈指示的第四内存资源;

获取第二数据栈指示的第三内存资源,以及第一数据栈指示的第四内存资源,其中,第四内存资源小于或等于第二阈值并且大于第一阈值,第三内存资源小于或等于第三阈值。

需要说明的是,第二阈值以及第三阈值可以为一个较小的数值,表示内存单元的数量已经处于较低水准。

603、基于第四内存资源小于或等于第二阈值且大于第一阈值,以及第三内存资源小于或等于第三阈值,为第二数据栈分配内存单元;

由于第四内存资源小于或等于第二阈值,并且第三内存资源也小于或等于第三阈值,说明第二数据栈以及第一数据栈中的内存单元的数量处于不充足的状态。基于此,为第二数据栈分配内存单元,从而将第三内存资源更新为上述第二内存资源。可以理解的是,第二内存资源可以等于第七阈值,该第七阈值表示内存单元的数量处于较高的水准。

优选的,第二内存资源大于第三阈值,或者第二内存资源也可以为其他数值,具体此处不做限定。

具体的,内存单元的分配可以分为两种方式实现:

方式1:当内存单元集合管理程序通过软件的形式实现时,内存管理程序检测各个数据栈中内存单元的数量情况,当出现类似上述内存单元的数量不充足的情况时,内存管理程序通过fill接口触发内存单元集合管理程序为第二数据栈分配内存单元。

方式2:硬件加速器实现上述内存单元集合管理程序的功能,硬件加速器检测各个数据栈中的内存单元的数量情况,当出现类似上述内存单元的数量不充足的情况时,硬件加速器为第二数据栈分配内存单元。

示例性的,当需要向内存单元子资源池1中的第二数据栈分配内存单元时,内存单元集合管理程序或者硬件加速器将内存单元集合1中的内存单元分配至第二数据栈中。需要说明的是,如果采用上述方式2实现,硬件加速器还会将分配至第二数据栈中的内存单元与缓存建立映射关系,从而使得应用程序可以直接从缓存中获取内存资源,进一步提高效率。

本实施例中步骤604与上述图5a所示实施例中步骤502类似,此处不再赘述。可以理解的是,第四内存资源在经过损耗后,在步骤604中将更新为第一内存资源。

本申请实施例中,当第一数据栈以及第二数据栈中的内存单元的数量都处于不充足状态时,为第二数据栈分配内存单元,从而当第一数据栈的内存单元数量等于第一阈值时,根据第二数据栈为应用程序提供内存资源,提高了内存分配的效率。

在实际的实现当中,在根据第二数据栈向应用程序提供内存资源之后,还可以根据第二数据栈以及第一数据栈的内存资源的变化情况,对内存分配方法做出相应的调整,请参阅图7,下面进行详细介绍:

本实施例中步骤701至步骤704与上述图6所示实施例中步骤601至步骤604类似,具体此处不再赘述。

705、获取第二数据栈指示的第五内存资源;

根据第二数据栈为应用程序提供内存资源之后,第二内存资源会逐渐损耗,直至更新为第五内存资源,获取第二数据栈指示的第五内存资源,其中,第五内存资源小于或等于第三阈值且大于第四阈值。

需要说明的是,第四阈值可以是一个很小的数值,表示内存单元的数量接近为零或者已经为零。

706、基于第五内存资源小于或等于第三阈值且大于第四阈值,以及第一内存资源小于第二阈值,为第一数据栈分配内存单元;

由于第五内存资源小于第三阈值且大于第四阈值,说明第二数据栈中的内存单元的数量已经处于不充足的状态,同时,第一内存资源等于第一阈值,说明第一数据栈中的内存单元的数量已经很少。基于此,为第一数据栈分配内存单元,可以理解的是,第一数据栈在被分配内存单元之后,内存单元的数量可以等于第六阈值,该第六阈值表示内存单元的数量处于较高的水准,第六阈值大于第二阈值,或者第二内存资源也可以为其他数值,具体此处不做限定。

内存单元具体的分配方式与上述图6所示实施例中步骤602中的类似,此处不再赘述。

可以理解的是,本实施例中分配内存单元的方式与上述图6所示实施例中步骤603类似,此处不再赘述。

707、获取第二数据栈指示的第六内存资源;

随着第二数据栈中的内存单元的损耗,第五内存资源将更新为第六内存资源,其中。第六内存资源等于第四阈值。

708、基于第六内存资源等于第四阈值,根据第一数据栈向目标应用程序提供内存资源。

由于第六内存资源等于第四阈值,并且第一数据栈中也分配了内存单元,因此内存管理程序根据第一数据栈向目标应用程序提供内存资源。

本申请实施例中,在第二数据栈的内存单元数量处于不充足的状态之后,为第一数据栈分配内存单元,并在第二数据栈的内存单元数量进一步下降之后,根据第一数据栈为应用程序提供内存资源,提供了方案的可靠性。

上面对本申请实施例中应用程序申请内存资源的情况进行了描述,请参阅图8,下面对本申请实施例中应用程序释放内存资源的情况进行描述:

2)应用程序申请内存资源。

801、根据第一数据栈接收目标应用程序释放的内存资源;

应用程序在运行的过程中,需要释放特定大小的内存资源,内存管理程序选择目标内存单元子资源池接收目标应用程序释放的内存资源。示例性的,以应用程序1将内存单元释放到内存单元子资源池1为例,应用程序1将内存单元释放到内存单元子资源池1中的第一数据栈中,第一数据栈指示了目标应用程序可用的内存资源。

802、基于第七内存资源等于第五阈值,根据第二数据栈接收目标应用程序释放的内存资源。

在某一时刻,第一数据栈指示的内存资源为第七内存资源,且第七内存资源等于第五阈值,第五阈值表示内存单元的数量即将使第一数据栈处于栈满状态或者已经使第一数据栈处于栈满状态。基于此,内存管理程序根据第二数据栈向目标应用程序提供内存资源,其中,第二数据栈指示了目标应用程序此时可用的第八内存资源,并且该第八内存资源未使得第二数据栈处于栈满状态,因此第二数据栈可以接收目标应用程序释放的内存单元。

本申请实施例中,当第一数据栈即将处于栈满状态或者已经处于栈满状态时,根据未处于栈满状态的第二数据栈接收目标应用程序释放的内存单元,从而及时将应用程序释放的内存单元进行回收。

上面对本申请实施例中内存分配方法的一个流程进行了描述,在实际的实现中,在根据第二数据栈接收目标应用程序释放的内存资源之前,还可以先对第二数据栈中的内存单元进行释放,请参阅图9,下面进行详细描述:

本实施例中步骤901与上述图8所示实施例中步骤801类似,具体此处不再赘述。

902、获取第一数据栈指示的第九内存资源;

获取第一数据栈指示的第九内存资源。在达到第五阈值之前,第一数据栈中的内存资源为第九内存资源,第二数据栈中的内存资源为第十内存资源,其中,第九内存资源大于或等于第六阈值,并且小于第五阈值,第十内存资源大于第八内存资源。该第六阈值表示第一数据栈中的内存单元的数量处于较高的水准,但是尚未接近栈满的状态。

903、基于第九内存资源大于或等于第六阈值且小于第五阈值,释放第二数据栈中的内存单元;

基于上述情况,为了当第一数据栈接近栈满时仍能实现对应用程序释放的内存单元的接收,需要释放第二数据栈中的内存单元。

具体的,内存管理程序可以调用flush接口触发内存单元集合管理程序将第二数据栈中的内存单元回收至对应的内存单元集合中,从而将第十内存资源更新为第八内存资源。

或者,如果采用硬件加速器的方式实现内存单元集合管理程序的功能,硬件加速器可以检测第一数据栈以及第二数据栈中的内存资源情况,当出现类似上述的内存资源情况时,硬件加速器将第二数据栈中的内存单元回收至对应的内存单元集合中。

本实施例中步骤904与上述图8所示实施例中步骤802类似,此处不再赘述。需要说明的是,第九内存资源更新后得到第七内存资源。

本申请实施例中,若第一数据栈中的内存单元的数量处于较高的水准,则将第二数据栈中的内存单元进行释放,从而为接下来根据第二数据栈接收应用程序释放的内存单元做准备,提高了方案的可靠性。

在实际的实现当中,在根据第二数据栈接收应用程序释放的内存单元之后,如果第二数据栈中的内存单元的数量逐渐增加至较高水准,还可以释放第一数据栈中的内存单元,请参阅图10,下面进行详细描述:

本实施例中步骤1001至步骤1004与上述图9所示实施例中步骤901至步骤904类似,此处不再赘述。

1005、获取第二数据栈指示的第十一内存资源;

获取第二数据栈指示的第十一内存资源。在根据第二数据栈接收应用程序释放的内存单元之后,第二数据栈的内存资源将由第八内存资源更新为第十一内存资源,该第十一内存资源大于或等于第七阈值,且小于第八阈值。其中,第七阈值表示第一数据栈中的内存单元的数量处于较高的水准,但是尚未接近栈满的状态,第八阈值表示内存单元的数量即将使第一数据栈处于栈满状态或者已经使第一数据栈处于栈满状态。

1006、基于第十一内存资源大于或等于第七阈值且小于第八阈值,释放第一数据栈中的内存单元;

基于上述情况,释放第一数据栈中的内存单元,具体的释放方式与上述图9所示实施例中步骤902类似,此处不再赘述。

1007、获取第二数据栈指示的第十二内存资源;

获取第二数据栈指示的第十二内存资源。随着第二数据栈接收应用程序释放的内存单元,第二数据栈将由第十一内存资源更新为第十二内存资源,该第十二内存资源等于第八阈值。

1008、基于第十二内存资源等于第八阈值,根据第一数据栈接收目标应用程序释放的内存资源。

基于上述情况,第二数据栈已经或者即将处于栈满状态,而第一数据栈释放过内存单元,因此根据第一数据栈接收目标应用程序释放的内存资源。

本申请实施例中,可以根据第一数据栈以及第二数据栈的内存资源的情况,进行内存单元的释放以及切换数据栈接收应用程序释放的内存单元。

上面对本申请实施例中的内存分配方法进行了描述,下面对本申请实施例中的内存分配设备进行描述:

请参阅图11,本申请实施例中内存分配设备1100包括处理单元1101。

处理单元1101,用于根据第一数据栈,向目标应用程序提供内存资源,其中,第一数据栈用于指示目标应用程序可使用的内存资源。具体实现方式,请参考如图5a所示实施例中步骤501、如图6所示实施例中步骤601以及如图7所示实施例中步骤701与步骤708中的详细描述,这里不再赘述。

处理单元1101,还用于基于目标应用程序可使用的内存资源为第一内存资源,第一内存资源等于第一阈值,根据第二数据栈向目标应用程序提供内存资源,其中,第二数据栈用于指示目标应用程序可使用的第二内存资源,第二内存资源大于第一阈值,第一数据栈与第二数据栈不同。具体实现方式,请参考如图5a所示实施例中步骤502、如图6所示实施例中步骤604以及如图7所示实施例中步骤704中的详细描述,这里不再赘述。

其中,第一内存资源以及所述第二内存资源包括内存单元的数量,第一数据栈的长度以及第二数据栈的长度与内存单元的数量呈正相关。

请参阅12,在上述图11所示实施例的基础上,请参阅图12,本申请实施例中内存分配设备1200还包括获取单元1202。

获取单元1202,用于获取第二数据栈指示的第三内存资源,以及第一数据栈指示的第四内存资源,第四内存资源更新后得到第一内存资源,第三内存资源更新后得到第二内存资源。具体实现方式,请参考如图6所示实施例中步骤602以及如图7所示实施例中步骤702中的详细描述,这里不再赘述。

处理单元1201,还用于基于第四内存资源小于或等于第二阈值且大于第一阈值,以及第三内存资源小于或等于第三阈值,为第二数据栈分配内存单元,以便将第三内存资源更新为第二内存资源,第二阈值大于第一阈值。具体实现方式,请参考如图6所示实施例中步骤602以及如图7所示实施例中步骤703中的详细描述,这里不再赘述。

在上述图12所示实施例的基础上,

获取单元1202,还用于获取第二数据栈指示的第五内存资源,第二内存资源更新后得到第五内存资源,第五内存资源小于第二内存资源。具体实现方式,请参考如图7所示实施例中步骤705中的详细描述,这里不再赘述。

处理单元1201,还用于基于第五内存资源小于或等于第三阈值且大于第四阈值,以及第一内存资源小于第二阈值,为第一数据栈分配内存单元。具体实现方式,请参考如图7所示实施例中步骤706中的详细描述,这里不再赘述。

在上述图12所示实施例的基础上,

获取单元1202,还用于获取第二数据栈指示的第六内存资源,第五内存资源更新后得到第六内存资源。具体实现方式,请参考如图7所示实施例中步骤707中的详细描述,这里不再赘述。

处理单元1201,还用于基于第六内存资源等于第四阈值,根据第一数据栈向目标应用程序提供内存资源。具体实现方式,请参考如图7所示实施例中步骤708中的详细描述,这里不再赘述。

在上述图12所示实施例的基础上,请参阅图13,本申请实施例中内存分配设备1300还包括调用单元1303。

调用单元1303,用于调用硬件加速器为第二数据栈分配内存单元。具体实现方式,请参考如图6所示实施例中步骤603中关于方式2的详细描述,这里不再赘述。

在上述图13所示实施例的基础上,

调用单元1303,用于调用硬件加速器为第一数据栈分配内存单元。具体实现方式,请参考如图6所示实施例中步骤603中关于方式2的详细描述,这里不再赘述。

请参阅图14,本申请实施例中内存释放设备1400包括处理单元1401;

处理单元1401,用于根据第一数据栈,接收目标应用程序释放的内存资源,其中,第一数据栈用于指示目标应用程序可使用的内存资源。具体实现方式,请参考如图8所示实施例中步骤801、如图9所示实施例中步骤901以及如图10所示实施例中步骤1001与1008中的详细描述,这里不再赘述。

处理单元1401,还用于基于可使用的内存资源为第七内存资源,第七内存资源等于第五阈值,根据第二数据栈向目标应用程序提供内存资源,其中,第二数据栈用于指示目标应用程序可使用的第八内存资源,第八内存资源未使第二数据栈为栈满状态,第一数据栈与第二数据栈不同。具体实现方式,请参考如图8所示实施例中步骤802、如图9所示实施例中步骤904以及如图10所示实施例中步骤1004中的详细描述,这里不再赘述。

其中,第七内存资源以及第八内存资源包括内存单元的数量,第一数据栈的长度以及第二数据栈的长度与内存单元的数量呈正相关。

在上述图14所示实施例的基础上,请参阅图15,本申请实施例中内存分配设备1500还包括获取单元1502;

获取单元1502,用于获取第一数据栈指示的第九内存资源,第九内存资源更新后得到第七内存资源。具体实现方式,请参考如图9所示实施例中步骤902以及如图10所示实施例中步骤1002中的详细描述,这里不再赘述。

处理单元1501,还用于基于第九内存资源大于或等于第六阈值且小于第五阈值,释放第二数据栈中的内存单元,使得第二数据栈指示的第十内存资源更新为第八内存资源。具体实现方式,请参考如图9所示实施例中步骤903以及如图10所示实施例中步骤1003中的详细描述,这里不再赘述。

在上述图14所示实施例的基础上,

获取单元1502,还用于获取第二数据栈指示的第十一内存资源,第八内存资源更新后得到第十一内存资源,第十一内存资源大于第八内存资源。具体实现方式,请参考如图10所示实施例中步骤1005中的详细描述,这里不再赘述。

处理单元1501,还用于基于第十一内存资源大于或等于第七阈值且小于第八阈值,释放第一数据栈中的内存单元。具体实现方式,请参考如图10所示实施例中步骤1006中的详细描述,这里不再赘述。

在上述图15所示实施例的基础上,

获取单元1502,还用于获取第二数据栈指示的第十二内存资源,第十一内存资源更新后得到第十二内存资源。具体实现方式,请参考如图10所示实施例中步骤1007中的详细描述,这里不再赘述。

处理单元1501,还用于基于第十二内存资源等于第八阈值,根据第一数据栈接收目标应用程序释放的内存资源。具体实现方式,请参考如图10所示实施例中步骤1008中的详细描述,这里不再赘述。

在上述图15所示实施例的基础上,请参阅图16,本申请实施例中内存分配设备1600还包括调用单元1603;

调用单元1603,用于调用硬件加速器释放第一数据栈中的内存单元。具体实现方式,请参考如图9所示实施例中步骤903中的详细描述,这里不再赘述。

在上述图16所示实施例的基础上,

调用单元1603,还用于调用硬件加速器释放第二数据栈中的内存单元。具体实现方式,请参考如图9所示实施例中步骤903中的详细描述,这里不再赘述。

图17是本申请实施例提供的一种内存处理装置结构示意图,该内存处理装置1700可以包括一个或一个以上中央处理器(central processing units,CPU)1701和存储器1705,该存储器1705中存储有一个或一个以上的应用程序或数据。

其中,存储器1705可以是易失性存储或持久存储。存储在存储器1705的程序可以包括一个或一个以上模块,每个模块可以包括对服务器中的一系列指令操作。更进一步地,中央处理器1701可以设置为与存储器1705通信,在内存处理装置1700上执行存储器1705中的一系列指令操作。

内存处理装置1700还可以包括一个或一个以上电源1702,一个或一个以上有线或无线网络接口1703,一个或一个以上输入输出接口1704,和/或,一个或一个以上操作系统,例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM等。

在一个实施例中,处理器1701用于根据第一数据栈向目标应用程序提供内存资源,具体实现方式,请参考如图5a所示实施例中步骤501、如图6所示实施例中步骤601以及如图7所示实施例中步骤701与步骤708中的详细描述,这里不再赘述。处理器1701还用于基于第一内存资源等于第一阈值,根据第二数据栈向目标应用程序提供内存资源,具体实现方式,请参考如图5a所示实施例中步骤502、如图6所示实施例中步骤604以及如图7所示实施例中步骤704中的详细描述,这里不再赘述。

在一种可能的实现中,处理器1701还用于获取第二数据栈指示的第三内存资源,以及第一数据栈指示的第四内存资源,第四内存资源更新后得到第一内存资源,第三内存资源更新后得到第二内存资源。具体实现方式,请参考如图6所示实施例中步骤602以及如图7所示实施例中步骤702中的详细描述,这里不再赘述。

处理器1701还用于基于第四内存资源小于或等于第二阈值且大于第一阈值,以及第三内存资源小于或等于第三阈值,为第二数据栈分配内存单元,以便将第三内存资源更新为第二内存资源,第二阈值大于第一阈值。具体实现方式,请参考如图6所示实施例中步骤602以及如图7所示实施例中步骤703中的详细描述,这里不再赘述。

在一种可能的实现中,处理器1701还用于获取第二数据栈指示的第五内存资源,第二内存资源更新后得到第五内存资源,第五内存资源小于第二内存资源。具体实现方式,请参考如图7所示实施例中步骤705中的详细描述,这里不再赘述。

处理器1701还用于基于第五内存资源小于或等于第三阈值且大于第四阈值,以及第一内存资源小于第二阈值,为第一数据栈分配内存单元。具体实现方式,请参考如图7所示实施例中步骤706中的详细描述,这里不再赘述。

在一种可能的实现中,处理器1701还用于获取第二数据栈指示的第六内存资源,第五内存资源更新后得到第六内存资源。具体实现方式,请参考如图7所示实施例中步骤707中的详细描述,这里不再赘述。

处理器1701还用于基于第六内存资源等于第四阈值,根据第一数据栈向目标应用程序提供内存资源。具体实现方式,请参考如图7所示实施例中步骤708中的详细描述,这里不再赘述。

在一种可能的实现中,处理器1701还可以根据硬件加速器为第二数据栈分配内存单元。具体实现方式,请参考如图6所示实施例中步骤603中关于方式2的详细描述,这里不再赘述。

在一种可能的实现中,处理器1701还可以根据硬件加速器为第一数据栈分配内存单元。具体实现方式,请参考如图6所示实施例中步骤603中关于方式2的详细描述,这里不再赘述。

在另一个实施例中,处理器1701用于根据第一数据栈,接收目标应用程序释放的内存资源,其中,第一数据栈用于指示目标应用程序可使用的内存资源。具体实现方式,请参考如图8所示实施例中步骤801、如图9所示实施例中步骤901以及如图10所示实施例中步骤1001与1008中的详细描述,这里不再赘述。处理器1701还用于基于可使用的内存资源为第七内存资源,第七内存资源等于第五阈值,根据第二数据栈向目标应用程序提供内存资源,其中,第二数据栈用于指示目标应用程序可使用的第八内存资源,第八内存资源未使第二数据栈为栈满状态,第一数据栈与第二数据栈不同。具体实现方式,请参考如图8所示实施例中步骤802、如图9所示实施例中步骤904以及如图10所示实施例中步骤1004中的详细描述,这里不再赘述。

在一种可能的实现中,处理器1701还用于获取第一数据栈指示的第九内存资源,第九内存资源更新后得到第七内存资源。具体实现方式,请参考如图9所示实施例中步骤902以及如图10所示实施例中步骤1002中的详细描述,这里不再赘述。

处理器1701还用于基于第九内存资源大于或等于第六阈值且小于第五阈值,释放第二数据栈中的内存单元,使得第二数据栈指示的第十内存资源更新为第八内存资源。具体实现方式,请参考如图9所示实施例中步骤903以及如图10所示实施例中步骤1003中的详细描述,这里不再赘述。

在一种可能的实现中,处理器1701还用于获取第二数据栈指示的第十一内存资源,第八内存资源更新后得到第十一内存资源,第十一内存资源大于第八内存资源。具体实现方式,请参考如图10所示实施例中步骤1005中的详细描述,这里不再赘述。

处理器1701还用于基于第十一内存资源大于或等于第七阈值且小于第八阈值,释放第一数据栈中的内存单元。具体实现方式,请参考如图10所示实施例中步骤1006中的详细描述,这里不再赘述。

在一种可能的实现中,处理器1701还用于获取第二数据栈指示的第十二内存资源,第十一内存资源更新后得到第十二内存资源。具体实现方式,请参考如图10所示实施例中步骤1007中的详细描述,这里不再赘述。

处理器1701还用于基于第十二内存资源等于第八阈值,根据第一数据栈接收目标应用程序释放的内存资源。具体实现方式,请参考如图10所示实施例中步骤1008中的详细描述,这里不再赘述。

在一种可能的实现中,处理器1701还可以根据硬件加速器释放第一数据栈中的内存单元。具体实现方式,请参考如图9所示实施例中步骤903中的详细描述,这里不再赘述。

在一种可能的实现中,处理器1701还可以根据硬件加速器释放第二数据栈中的内存单元。具体实现方式,请参考如图9所示实施例中步骤903中的详细描述,这里不再赘述。

请参阅图18,本申请实施例还提供了一种芯片,该芯片包括处理器1801。

在一个实施例中,处理器1801用于根据第一数据栈,向目标应用程序提供内存资源,其中,第一数据栈用于指示目标应用程序可使用的内存资源。具体实现方式,请参考如图5a所示实施例中步骤501、如图6所示实施例中步骤601以及如图7所示实施例中步骤701与步骤708中的详细描述,这里不再赘述。

处理器1801,还用于基于目标应用程序可使用的内存资源为第一内存资源,第一内存资源等于第一阈值,根据第二数据栈向目标应用程序提供内存资源,其中,第二数据栈用于指示目标应用程序可使用的第二内存资源,第二内存资源大于第一阈值,第一数据栈与第二数据栈不同。具体实现方式,请参考如图5a所示实施例中步骤502、如图6所示实施例中步骤604以及如图7所示实施例中步骤704中的详细描述,这里不再赘述。

在一种可能的实现中,处理器1801还用于获取第二数据栈指示的第三内存资源,以及第一数据栈指示的第四内存资源,第四内存资源更新后得到第一内存资源,第三内存资源更新后得到第二内存资源。具体实现方式,请参考如图6所示实施例中步骤602以及如图7所示实施例中步骤702中的详细描述,这里不再赘述。

处理器1801,还用于基于第四内存资源小于或等于第二阈值且大于第一阈值,以及第三内存资源小于或等于第三阈值,为第二数据栈分配内存单元,以便将第三内存资源更新为第二内存资源,第二阈值大于第一阈值。具体实现方式,请参考如图6所示实施例中步骤602以及如图7所示实施例中步骤703中的详细描述,这里不再赘述。

在一种可能的实现中,处理器1801还用于获取第二数据栈指示的第五内存资源,第二内存资源更新后得到第五内存资源,第五内存资源小于第二内存资源。具体实现方式,请参考如图7所示实施例中步骤705中的详细描述,这里不再赘述。

处理器1801,还用于基于第五内存资源小于或等于第三阈值且大于第四阈值,以及第一内存资源小于第二阈值,为第一数据栈分配内存单元。具体实现方式,请参考如图7所示实施例中步骤706中的详细描述,这里不再赘述。

在一种可能的实现中,处理器1801,还用于获取第二数据栈指示的第六内存资源,第五内存资源更新后得到第六内存资源。具体实现方式,请参考如图7所示实施例中步骤707中的详细描述,这里不再赘述。

处理器1801,还用于基于第六内存资源等于第四阈值,根据第一数据栈向目标应用程序提供内存资源。具体实现方式,请参考如图7所示实施例中步骤708中的详细描述,这里不再赘述。

在一种可能的实现中,芯片1800还包括硬件加速器1803。

硬件加速器1803,用于为第二数据栈分配内存单元。具体实现方式,请参考如图6所示实施例中步骤603中关于方式2的详细描述,这里不再赘述。

硬件加速器1803,还用于为第一数据栈分配内存单元。具体实现方式,请参考如图6所示实施例中步骤603中关于方式2的详细描述,这里不再赘述。

在另一种实施例中,处理器1801,用于根据第一数据栈,接收目标应用程序释放的内存资源,其中,第一数据栈用于指示目标应用程序可使用的内存资源。具体实现方式,请参考如图8所示实施例中步骤801、如图9所示实施例中步骤901以及如图10所示实施例中步骤1001与1008中的详细描述,这里不再赘述。

处理器1801,还用于基于可使用的内存资源为第七内存资源,第七内存资源等于第五阈值,根据第二数据栈向目标应用程序提供内存资源,其中,第二数据栈用于指示目标应用程序可使用的第八内存资源,第八内存资源未使第二数据栈为栈满状态,第一数据栈与第二数据栈不同。具体实现方式,请参考如图8所示实施例中步骤802、如图9所示实施例中步骤904以及如图10所示实施例中步骤1004中的详细描述,这里不再赘述。

在一种可能的实现中,处理器1801,用于获取第一数据栈指示的第九内存资源,第九内存资源更新后得到第七内存资源。具体实现方式,请参考如图9所示实施例中步骤902以及如图10所示实施例中步骤1002中的详细描述,这里不再赘述。

处理器1801,还用于基于第九内存资源大于或等于第六阈值且小于第五阈值,释放第二数据栈中的内存单元,使得第二数据栈指示的第十内存资源更新为第八内存资源。具体实现方式,请参考如图9所示实施例中步骤903以及如图10所示实施例中步骤1003中的详细描述,这里不再赘述。

在一种可能的实现中,处理器1801,还用于获取第二数据栈指示的第十一内存资源,第八内存资源更新后得到第十一内存资源,第十一内存资源大于第八内存资源。具体实现方式,请参考如图10所示实施例中步骤1005中的详细描述,这里不再赘述。

处理器1801,还用于基于第十一内存资源大于或等于第七阈值且小于第八阈值,释放第一数据栈中的内存单元。具体实现方式,请参考如图10所示实施例中步骤1006中的详细描述,这里不再赘述。

在一种可能的实现中,处理器1801,还用于获取第二数据栈指示的第十二内存资源,第十一内存资源更新后得到第十二内存资源。具体实现方式,请参考如图10所示实施例中步骤1007中的详细描述,这里不再赘述。

处理器1801,还用于基于第十二内存资源等于第八阈值,根据第一数据栈接收目标应用程序释放的内存资源。具体实现方式,请参考如图10所示实施例中步骤1008中的详细描述,这里不再赘述。

在一种可能的实现中,芯片1800还包括硬件加速器1803。

硬件加速器1803,用于释放第一数据栈中的内存单元。具体实现方式,请参考如图9所示实施例中步骤903中的详细描述,这里不再赘述。

硬件加速器1803,还用于释放第二数据栈中的内存单元。具体实现方式,请参考如图9所示实施例中步骤903中的详细描述,这里不再赘述。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,read-onlymemory)、随机存取存储器(RAM,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。

相关技术
  • 一种内存分配方法、装置及终端
  • 一种用于使数字信号和相关码相关的方法、装置、计算机程序、芯片组或数据结构
  • 一种脚本加密方法、脚本解密运行方法和相关装置
  • 一种模型训练方法、合成说话表情的方法和相关装置
  • 一种图像识别模型的训练方法、图像识别方法和相关装置
  • 一种内存分配方法、部署方法及相关装置
  • 一种网络数据包的内存分配方法、装置及相关设备
技术分类

06120115603816