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

内存分配方法及相关设备

文献发布时间:2023-06-19 09:32:16


内存分配方法及相关设备

技术领域

本申请涉及计算机存储技术领域,尤其涉及一种内存分配方法及相关设备。

背景技术

嵌入式系统往往使用多个线程来完成不同的任务,多个线程可以使用的系统内存资源相同,而系统内存资源有限。当线程因系统内存资源不够而申请不到内存资源时,会导致线程不能进行任务处理,对系统的业务造成巨大的影响,因此如何提升内存资源的利用率是亟待解决的问题。

发明内容

本申请实施例提供一种内存分配方法及相关设备,用于提高内存资源的利用率。

第一方面,本申请实施例提供一种内存分配方法,应用于电子设备,方法包括:

接收内存分配请求,所述内存分配请求用于请求为第一线程分配内存,所述内存分配请求携带期望内存容量;

基于所述期望内存容量为所述第一线程分配目标内存,以及记录所述目标内存的属性信息;

接收内存释放请求,所述内存释放请求用于释放所述目标内存;

基于所述属性信息释放所述目标内存。

第二方面,本申请实施例提供一种内存分配装置,应用于电子设备,装置包括:

第一接收单元,用于接收内存分配请求,所述内存分配请求用于请求为第一线程分配内存,所述内存分配请求携带期望内存容量;

分配单元,用于基于所述期望内存容量为所述第一线程分配目标内存;

记录单元,用于记录所述目标内存的属性信息;

第二接收单元,用于接收内存释放请求,所述内存释放请求用于释放所述目标内存;

释放单元,用于基于所述属性信息释放所述目标内存。

第三方面,本申请实施例提供一种电子设备,包括处理器、存储器以及一个或多个程序,其中,上述一个或多个程序被存储在上述存储器中,并且被配置由上述处理器执行,上述一个或多个程序包括用于执行本申请实施例第一方面所述的方法中的步骤的指令。

第四方面,本申请实施例提供了一种计算机可读存储介质,其中,上述计算机可读存储介质存储用于电子数据交换的计算机程序,其中,上述计算机程序使得计算机执行如本申请实施例第一方面所述的方法中所描述的部分或全部步骤。

第五方面,本申请实施例提供了一种计算机程序产品,其中,上述计算机程序产品包括存储了计算机程序的非瞬时性计算机可读存储介质,上述计算机程序可操作来使计算机执行如本申请实施例第一方面所述的方法中所描述的部分或全部步骤。该计算机程序产品可以为一个软件安装包。

可以看出,在本申请实施例中,首先接收内存分配请求,内存分配请求用于请求为第一线程分配内存,内存分配请求携带期望内存容量;然后基于期望内存容量为第一线程分配目标内存,以及记录目标内存的属性信息;再然后接收内存释放请求,内存释放请求用于释放目标内存;最后基于属性信息释放目标内存。由于电子设备根据期望内存容量为第一线程分配目标内存,而不是随意的为第一线程分配内存,因此有利于提升内存资源的利用率。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本申请实施例提供的一种内存分配方法的流程示意图;

图2是本申请实施例提供的一种内存分配架构图;

图3是本申请实施例提供的一种属性信息存储示意图;

图4本申请实施例提供的一种电子设备的结构示意图;

图5本申请实施例提供的一种内存分配装置的结构示意图。

具体实施方式

为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。

以下分别进行详细说明。

本申请的说明书和权利要求书及所述附图中的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。

在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。

电子设备可以包括各种具有无线通信功能的手持设备、车载设备、可穿戴设备、计算设备或连接到无线调制解调器的其他处理设备,以及各种形式的用户设备(UserEquipment,UE),移动台(Mobile Station,MS),终端设备(Terminal Device)等等。

下面对本申请实施例进行详细介绍。

如图1所示,本申请实施例提供的一种内存分配方法,应用于上述电子设备,具体包括以下步骤:

步骤101:接收内存分配请求,所述内存分配请求用于请求为第一线程分配内存,所述内存分配请求携带期望内存容量。

其中,在接收到内存分配请求之前,电子设备可能为第一线程分配过内存,也可能没有为第一线程分配过内存。

步骤102:基于所述期望内存容量为所述第一线程分配目标内存,以及记录所述目标内存的属性信息。

其中,如图2所示的内存分配架构,内存池2的内存容量小于内存池3的内存容量,内存池2、内存池3以及内存块4都是从内存池1中分配的。

其中,图2中的n可以为16,m为正整数。在其它实施例中,n值可根据实际情况进行相应的调整,即,可以大于16,也可以小于16。

其中,内存池2可以包括16个内存块,每个内存块的内存容量均为512KB,每个内存块包括至少一个内存节点,内存节点的内存容量小于等于512KB。在其它实施例中,内存池2所包括的内存块的数量,以及每个内存块的内存容量大小,均可根据实际情况进行相应的调整。

其中,内存池3包括可以16个内存块,每个内存块的内存容量均为3M,每个内存块均包括至少一个内存节点,内存节点的内存容量大于512KB且小于等于3M。在其它实施例中,内存池3所包括的内存块的数量,以及每个内存块的内存容量大小,均可根据实际情况进行相应的调整。

其中,内存块4的内存容量大于3M。即,内存块4的内存容量大于内存池3中内存块的内存容量,内存池3中内存块的内存容量大于内存池2中内存块的内存容量。

在其它实施例中,内存块4的内存容量的大小可根据实际情况进行相应的调整,并且,内存块4的内存容量与内存池3中内存块的内存容量以及内存池2中内存块的内存容量的大小关系,也可以根据实际情况进行相应的调整。

其中,若期望内存容量小于或等于512KB,则从内存池2中的内存块中分配内存节点,若期望内存容量大于512KB,且小于或等于3M,则从内存池3中的内存块中分配内存节点,若期望内存容量大于3M,则从内存池1中取内存块。

其中,目标内存可以是图1中的内存块4,也可以是内存池2中的内存节点,也可以是内存池3中的内存节点。

其中,属性信息包括目标内存的地址,目标内存所在的内存块的地址以及第一线程申请到的实际内存容量。

其中,目标内存的容量大于或等于第一线程申请到的实际内存容量,在目标内存中第一线程允许使用申请到的实际内存容量。

举例来说,若目标内存的容量为3.5M,而第一线程申请到的实际内存容量为2M,因此第一线程可使用目标内存中的2M内存。

可选地,所述内存分配请求还携带地址对齐条件,所述地址对齐条件用于确定属性记录地址,所述属性记录地址用于存储所述属性信息,所述属性记录地址是基于所述地址对齐条件和所述目标内存的起始地址确定的。

其中,所述属性记录地址是基于所述地址对齐条件和所述目标内存的起始地址确定的,包括:

基于所述目标内存的第一起始地址和所述地址对齐条件确定第二起始地址;

基于所述第二起始地址确定所述属性记录地址。

其中,第二起始地址为返回给用户的地址。

其中,地址对齐条件为第二起始地址为预设数值的整数倍,该预设数值可以是256byte,也可以是其他数值。

其中,如图3所示为属性信息存储示意图,存储属性信息的属性记录地址包括地址1、地址2、地址3以及地址4,地址1为地址4的第前3个地址,地址2为地址4的第前2个地址,地址3为地址4的第前1个地址。

其中,目标内存所在的内存块的地址存储地址1中,申请到的实际内存容量存储在地址2中,目标内存地址存储地址3中,地址4为第二起始地址。

其中,地址的字符类型为uint8_t。可以理解,在其它实施例中,地址的字符类型可以为其它类型。

可选地,所述申请到的实际内存容量是基于所述地址对齐条件、所述期望内存容量以及额外信息所需的内存容量确定的。

其中,所述额外信息包括控制信息和/或调试信息,例如本段内存大小、下段内存起始地址、内存边界标记,等等。

其中,在32位操作系统中额外信息所需的内存容量为12byte,在64位操作系统中额外信息所需的内存容量为24byte。

举例来说,若期望内存容量为1M,地址对齐条件为第二起始地址为256byte的整数倍,额外信息所需的内存容量为24byte,则申请到的实际内存容量为1M+256byte+24byte。

步骤103:接收内存释放请求,所述内存释放请求用于释放所述目标内存。

步骤104:基于所述属性信息释放所述目标内存。

可以看出,在本申请实施例中,首先接收内存分配请求,内存分配请求用于请求为第一线程分配内存,内存分配请求携带期望内存容量;然后基于期望内存容量为第一线程分配目标内存,以及记录目标内存的属性信息;再然后接收内存释放请求,内存释放请求用于释放目标内存;最后基于属性信息释放目标内存。由于电子设备根据期望内存容量为第一线程分配目标内存,而不是随意的为第一线程分配内存,因此有利于提升内存资源的利用率。

在本申请的一实现方式中,所述基于所述期望内存容量为所述第一线程分配目标内存,包括:

若所述期望内存容量大于第一内存容量,则从第一内存池中分配所述目标内存,所述目标内存的容量大于所述期望内存容量;

若所述期望内存容量小于或等于所述第一内存容量,则基于第二内存池的占用信息和所述期望内存容量分配所述目标内存,所述第一内存池的容量大于所述第二内存池的容量。

其中,第一内存容量可以是3M,也可以是其他容量。

其中,在期望内存容量大于第一内存容量的情况下,目标内存为图1中的内存块4。

其中,第二内存池是从第一内存池中分配的,第二内存池可能为图1中的内存池2,也可能为图1中的内存池3。

可以看出,根据期望内存容量分配目标内存,有利于提升内存利用率。

在本申请的一实现方式中,所述第二内存池包括N个第一内存块,每个所述第一内存块包括至少一个内存节点,所述N为正整数;

所述基于第二内存池的占用信息和所述期望内存容量分配所述目标内存,包括:

在所述第一线程未占用所述N个第一内存块且所述N个第一内存块均被占用,或者所述N个第一内存块均被占用、所述第一线程占用M个第一内存块以及所述M个第一内存块不存在空闲内存节点的情况下,则从所述第一内存池中分配第一内存,以及在所述第一内存中确定所述目标内存,对所述目标内存进行分配,所述M为正整数,所述M小于或等于所述N;

在所述第一线程占用所述M个第一内存块且所述M个第一内存块存在空闲内存节点的情况下,基于所述M个第一内存块确定所述目标内存,以及分配所述目标内存;

在所述第一线程占用所述M个第一内存块、M个所述第一内存块不存在空闲内存节点以及所述N个第一内存块包括第一空闲内存块的情况下,基于所述第一空闲内存块确定所述目标内存,以及分配所述目标内存,所述第一空闲内存块为所述N个第一内存块中除所述M个第一内存块之外的未被占用的第一内存块。

其中,N个第一内存块的容量可以相同。

其中,每个内存节点的容量可以相同。

其中,同一个内存块中的内存节点仅能被一个线程占用,不同的线程需占用不同内存块中的内存节点。

其中,若第一线程占用M个第一内存块,则M个第一内存块构成一个双向环形链表,链表的表头可以为第一线程最先占用的第一内存块,链表的表尾可以为第一线程最后占用的第一内存块。

其中,第一内存可以划分为16个内存块,该16个内存块包括目标内存,该16个内存块中每个内存块的内存容量可以为3M,也可以为512KB。

其中,第一空闲内存块以单向链表的形式存储在空闲池中。

其中,基于第一空闲块确定目标内存,是将作为单向链表表头的第一空闲块确定为目标内存。

可以看出,在本申请实施例中,第一线程不占用其他线程占用的内存块中的内存节点,有利于避免电子设备对内存节点加锁,降低了电子设备的计算复杂度。

在本申请的一实现方式中,所述第一内存的头部信息存储在系统堆中。

第一内存的头部信息包括控制信息、调试信息,例如本段内存大小、下段内存起始地址、内存边界标记,等等。

在本申请的一实现方式中,所述在所述第一内存中确定所述目标内存,包括:

将所述第一内存划分为S个第二内存块,以及将所述S个第二内存块放入所述第二内存池;

在所述S个第二内存块中确定第一目标内存块;

将所述第一目标内存块中的第一目标内存节点确定为所述目标内存。

其中,S个第二内存块构成一个单向链表,该单向链表的表头为第一目标内存块。

其中,S个第二内存块的内存容量相同。

其中,S可以是16,也可以是其他值。

其中,第一目标内存块中的内存节点构成单向链表,该单向链表的表头为第一目标内存节点。

可以看出,在本申请实施例中,将第一内存的头部信息存储在系统堆中,以使第一内存的头部信息不占用第一内存的存储空间,从而有利于提升第二内存块的数量。

在本申请的一实现方式中,所述空闲内存节点包括第一空闲内存节点和/或第二空闲内存节点,所述第一空闲节点为未被占用过的内存节点,或由所述第一线程申请且由所述第一线程释放的内存节点,所述第二空闲内存节点为由所述第一线程申请且不由所述第一线程释放的内存节点;

所述基于所述M个第一内存块确定所述目标内存,包括:

在所述M个第一内存块存在所述第一空闲内存节点的情况下,将所述第一空闲内存节点中的第二目标内存节点确定为所述目标内存;

在所述M个第一内存块不存在所述第一空闲内存节点且所述M个第一内存块存在所述第二空闲内存节点的情况下,将所述第二空闲内存节点中的第三目标内存节点确定为所述目标内存。

其中,若第一空闲节点为由所述第一线程申请且由所述第一线程释放的内存节点,则第一空闲节点为第一线程的私有内存节点,且第一空闲节点构成一个单向链表,且该单向链表的表头为第二目标内存节点。

其中,确定单向链表的表头为第二目标内存节点后,该单向链表不包括第二目标内存节点,且该单向链表的表头为第二目标内存节点的下游邻节点。

其中,第二空闲节点为第一线程的公共内存节点,且第二空闲节点构成一个单向链表,且该单向链表的表头为第三目标内存节点。

其中,确定单向链表的表头为第三目标内存节点后,该单向链表不包括第三目标内存节点,且该单向链表的表头为第三目标内存节点的下游邻节点。

其中,第二空闲节点为待释放的内存节点。

可以看出,在本申请实施例中,由于释放内存节点所需的时间远大于申请内存节点的时间,因此使用第二空闲节点,避免了出现线程长时间运行后内存耗尽的问题。

在本申请的一实现方式中,所述基于所述第一空闲内存块确定所述目标内存,包括:

在所述第一空闲内存块中确定第二目标内存块;

将所述第二目标内存块中的第四目标内存节点确定为所述目标内存。

其中,第一空闲内存块以单向链表的形式存储在空闲池中,该单向链表的表头为第二目标内存块。

其中,确定单向链表的表头为第二目标内存块后,该单向链表不包括第二目标内存块,且该单向链表的表头为第二目标内存块的下游邻节点。

其中,第二目标内存块中的内存节点构成一个单项链表,该单向链表的表头为第四目标内存节点。

其中,确定单向链表的表头为第四目标内存节点后,该单向链表不包括第四目标内存节点,且该单向链表的表头为第四目标内存节点的下游邻节点。

可以看出,在本申请实施例中,在第一空闲内存块中确定第二目标内存块,有利于提升内存利用率。

在本申请的一实现方式中,所述属性信息包括所述目标内存的第一目标地址,所述目标内存所在的第三内存块的第二目标地址;

所述基于所述属性信息释放所述目标内存,包括:

若所述第二目标地址为第一地址,则基于所述第一目标地址,采用第二线程对所述目标内存进行释放;

若所述第二目标地址不为所述第一地址,则基于所述第一目标地址和所述第二目标地址,采用第三线程对所述目标内存进行释放。

其中,第一地址对应的值可以是零,也可以是其他值。

其中,第二线程和第三线程可能是同一个线程,也可能不是同一个线程。

其中,若第二目标地址为第一地址,表示目标内存是第一内存池分配的,以及将目标内存释放到第一内存池中。

其中,若第二目标地址不为第一地址,则可基于第二目标地址确定目标内存所在的内存块,以及基于第一目标地址将目标内存释放到第三内存块中。

可以看出,在本申请实施例中,通过第二目标地址,确定目标内存所在的内存,有利于提升释放目标内存的效率。

在本申请的一实现方式中,所述采用第三线程对所述目标内存进行释放之后,所述方法还包括:

在所述第一线程和所述第三线程不是同一个线程,且所述第一线程已关闭的情况下,定义所述第三内存块包括的公共内存节点为所述第三内存块的私有内存节点;

在所述第三内存块已分配的内存节点的数量为第一数量的情况下,采用所述第三线程对所述第三内存块进行释放。

其中,第一数量可以是零。

可选地,若第一线程和第三线程是同一个线程,则将目标内存节点定义为所述第一线程的私有节点,以及将所述第三内存块可分配的内存节点的数量减一;

在所述第三内存块可分配的内存节点的数量为零的情况下,将所述第三内存块进行释放。

可选地,若第一线程和第三线程不是同一个线程,且所述第一线程未结束,则将所述目标内存节点定义为所述第三内存块的公共节点。

可以看出,在本申请实施例中,在第一线程已结束的情况下,将目标内存节点定义为第一线程的私有节点,不改变目标内存节点所属的内存块,避免了第三线程只能释放内存节点,不负责内存节点申请而导致的内存耗尽的问题。

在本申请的一实现方式中,若所述期望内存容量大于第二内存容量,则确定所述第二内存池为第三内存池,所述第二内存容量小于所述第一内存容量;

若所述期望内存容量小或等于第二内存容量,则确定所述第二内存池为第四内存池,所述第三内存池包括的内存节点的容量大于所述第四内存池包括的内存节点的容量。

其中,第三内存池和第四内存池均是从第一内存池中分配的。

其中,第三内存池为图1中的内存池2,第四内存池为图1中的内存池3。

其中,第三内存池中未被占用的内存块可以组成一个单向链表。

其中,第四内存池包括至少一个内存块,每个内存块包括至少一个内存节点。

其中,第四内存池中未被占用的内存块可以组成一个单向链表。

可以看出,在本申请实施例中,不同的目标内存容量申请到的内存节点的容量不同,有利提升内存利用率。

与上述图1所示的实施例一致的,请参阅图4,图4是本申请实施例提供的一种电子设备的结构示意图,如图所示,该电子设备包括处理器、存储器以及一个或多个程序,其中,上述一个或多个程序被存储在上述存储器中,并且被配置由上述处理器执行,上述程序包括用于执行以下步骤的指令:

接收内存分配请求,所述内存分配请求用于请求为第一线程分配内存,所述内存分配请求携带期望内存容量;

基于所述期望内存容量为所述第一线程分配目标内存,以及记录所述目标内存的属性信息;

接收内存释放请求,所述内存释放请求用于释放所述目标内存;

基于所述属性信息释放所述目标内存。

在本申请的一实现方式中,在基于所述期望内存容量为所述第一线程分配目标内存方面,上述程序包括用于执行以下步骤的指令:

若所述期望内存容量大于第一内存容量,则从第一内存池中分配所述目标内存,所述目标内存的容量大于所述期望内存容量;

若所述期望内存容量小于或等于所述第一内存容量,则基于第二内存池的占用信息和所述期望内存容量分配所述目标内存,所述第一内存池的容量大于所述第二内存池的容量。

在本申请的一实现方式中,所述第二内存池包括N个第一内存块,每个所述第一内存块包括至少一个内存节点,所述N为正整数;在基于第二内存池的占用信息和所述期望内存容量分配所述目标内存方面,上述程序具体用于执行以下步骤的指令:

在所述第一线程未占用所述N个第一内存块且所述N个第一内存块均被占用,或者所述N个第一内存块均被占用、所述第一线程占用M个第一内存块以及所述M个第一内存块不存在空闲内存节点的情况下,则从所述第一内存池中分配第一内存,以及在所述第一内存中确定所述目标内存,对所述目标内存进行分配,所述M为正整数,所述M小于或等于所述N;

在所述第一线程占用所述M个第一内存块且所述M个第一内存块存在空闲内存节点的情况下,基于所述M个第一内存块确定所述目标内存,以及分配所述目标内存;

在所述第一线程占用所述M个第一内存块、M个所述第一内存块不存在空闲内存节点以及所述N个第一内存块包括第一空闲内存块的情况下,基于所述第一空闲内存块确定所述目标内存,以及分配所述目标内存,所述第一空闲内存块为所述N个第一内存块中除所述M个第一内存块之外的未被占用的第一内存块。

在本申请的一实现方式中,所述第一内存的头部信息存储在系统堆中。

在本申请的一实现方式中,在在所述第一内存中确定所述目标内存方面,上述程序具体用于执行以下步骤的指令:

将所述第一内存划分为S个第二内存块,以及将所述S个第二内存块放入所述第二内存池;

在所述S个第二内存块中确定第一目标内存块;

将所述第一目标内存块中的第一目标内存节点确定为所述目标内存。

在本申请的一实现方式中,所述空闲内存节点包括第一空闲内存节点和/或第二空闲内存节点,所述第一空闲节点为未被占用过的内存节点,或由所述第一线程申请且由所述第一线程释放的内存节点,所述第二空闲内存节点为由所述第一线程申请且不由所述第一线程释放的内存节点;

在基于所述M个第一内存块确定所述目标内存方面,上述程序具体用于执行以下步骤的指令:

在所述M个第一内存块存在所述第一空闲内存节点的情况下,将所述第一空闲内存节点中的第二目标内存节点确定为所述目标内存;

在所述M个第一内存块不存在所述第一空闲内存节点且所述M个第一内存块存在所述第二空闲内存节点的情况下,将所述第二空闲内存节点中的第三目标内存节点确定为所述目标内存。

在本申请的一实现方式中,在基于所述第一空闲内存块确定所述目标内存方面,上述程序具体用于执行以下步骤的指令:

在所述第一空闲内存块中确定第二目标内存块;

将所述第二目标内存块中的第四目标内存节点确定为所述目标内存。

在本申请的一实现方式中,所述属性信息包括所述目标内存的第一目标地址,所述目标内存所在的第三内存块的第二目标地址;

在基于所述属性信息释放所述目标内存方面,上述程序具体用于执行以下步骤的指令:

若所述第二目标地址为第一地址,则基于所述第一目标地址,采用第二线程对所述目标内存进行释放;

若所述第二目标地址不为所述第一地址,则基于所述第一目标地址和所述第二目标地址,采用第三线程对所述目标内存进行释放。

在本申请的一实现方式中,在采用第三线程对所述目标内存进行释放之后,上述程序具体还用于执行以下步骤的指令:

在所述第一线程和所述第三线程不是同一个线程,且所述第一线程已关闭的情况下,定义所述第三内存块包括的公共内存节点为所述第三内存块的私有内存节点;

在所述第三内存块已分配的内存节点的数量为第一数量的情况下,采用所述第三线程对所述第三内存块进行释放。

在本申请的一实现方式中,若所述期望内存容量大于第二内存容量,则确定所述第二内存池为第三内存池,所述第二内存容量小于所述第一内存容量;

若所述期望内存容量小或等于第二内存容量,则确定所述第二内存池为第四内存池,所述第三内存池包括的内存节点的容量大于所述第四内存池包括的内存节点的容量。

需要说明的是,本实施例的具体实现过程可参见上述方法实施例所述的具体实现过程,在此不再叙述。

请参阅图5,图5是本申请实施例提供的一种内存分配装置,应用于上述电子设备,该装置包括:

第一接收单元501,用于接收内存分配请求,所述内存分配请求用于请求为第一线程分配内存,所述内存分配请求携带期望内存容量;

分配单元502,用于基于所述期望内存容量为所述第一线程分配目标内存;

记录单元503,用于记录所述目标内存的属性信息;

第二接收单元504,用于接收内存释放请求,所述内存释放请求用于释放所述目标内存;

释放单元505,用于基于所述属性信息释放所述目标内存。

在本申请的一实现方式中,在基于所述期望内存容量为所述第一线程分配目标内存方面,上述分配单元502用于执行以下步骤的指令:

若所述期望内存容量大于第一内存容量,则从第一内存池中分配所述目标内存,所述目标内存的容量大于所述期望内存容量;

若所述期望内存容量小于或等于所述第一内存容量,则基于第二内存池的占用信息和所述期望内存容量分配所述目标内存,所述第一内存池的容量大于所述第二内存池的容量。

在本申请的一实现方式中,所述第二内存池包括N个第一内存块,每个所述第一内存块包括至少一个内存节点,所述N为正整数;在基于第二内存池的占用信息和所述期望内存容量分配所述目标内存方面,上述分配单元502具体用于执行以下步骤的指令:

在所述第一线程未占用所述N个第一内存块且所述N个第一内存块均被占用,或者所述N个第一内存块均被占用、所述第一线程占用M个第一内存块以及所述M个第一内存块不存在空闲内存节点的情况下,则从所述第一内存池中分配第一内存,以及在所述第一内存中确定所述目标内存,对所述目标内存进行分配,所述M为正整数,所述M小于或等于所述N;

在所述第一线程占用所述M个第一内存块且所述M个第一内存块存在空闲内存节点的情况下,基于所述M个第一内存块确定所述目标内存,以及分配所述目标内存;

在所述第一线程占用所述M个第一内存块、M个所述第一内存块不存在空闲内存节点以及所述N个第一内存块包括第一空闲内存块的情况下,基于所述第一空闲内存块确定所述目标内存,以及分配所述目标内存,所述第一空闲内存块为所述N个第一内存块中除所述M个第一内存块之外的未被占用的第一内存块。

在本申请的一实现方式中,所述第一内存的头部信息存储在系统堆中。

在本申请的一实现方式中,在所述第一内存中确定所述目标内存方面,上述分配单元502具体用于执行以下步骤的指令:

将所述第一内存划分为S个第二内存块,以及将所述S个第二内存块放入所述第二内存池;

在所述S个第二内存块中确定第一目标内存块;

将所述第一目标内存块中的第一目标内存节点确定为所述目标内存。

在本申请的一实现方式中,所述空闲内存节点包括第一空闲内存节点和/或第二空闲内存节点,所述第一空闲节点为未被占用过的内存节点,或由所述第一线程申请且由所述第一线程释放的内存节点,所述第二空闲内存节点为由所述第一线程申请且不由所述第一线程释放的内存节点;

在基于所述M个第一内存块确定所述目标内存方面,上述分配单元502具体用于执行以下步骤的指令:

在所述M个第一内存块存在所述第一空闲内存节点的情况下,将所述第一空闲内存节点中的第二目标内存节点确定为所述目标内存;

在所述M个第一内存块不存在所述第一空闲内存节点且所述M个第一内存块存在所述第二空闲内存节点的情况下,将所述第二空闲内存节点中的第三目标内存节点确定为所述目标内存。

在本申请的一实现方式中,在基于所述第一空闲内存块确定所述目标内存方面,上述分配单元502具体用于执行以下步骤的指令:

在所述第一空闲内存块中确定第二目标内存块;

将所述第二目标内存块中的第四目标内存节点确定为所述目标内存。

在本申请的一实现方式中,所述属性信息包括所述目标内存的第一目标地址,所述目标内存所在的第三内存块的第二目标地址;

在基于所述属性信息释放所述目标内存方面,上述释放单元305具体用于执行以下步骤的指令:

若所述第二目标地址为第一地址,则基于所述第一目标地址,采用第二线程对所述目标内存进行释放;

若所述第二目标地址不为所述第一地址,则基于所述第一目标地址和所述第二目标地址,采用第三线程对所述目标内存进行释放。

在本申请的一实现方式中,所述内存分配装置还包括定义单元506和确定单元507。

在本申请的一实现方式中,在采用第三线程对所述目标内存进行释放之后,上述定义单元506具体用于执行以下步骤的指令:

在所述第一线程和所述第三线程不是同一个线程,且所述第一线程已关闭的情况下,定义所述第三内存块包括的公共内存节点为所述第三内存块的私有内存节点;

上述释放单元505具体还用于执行以下步骤的指令:

在所述第三内存块已分配的内存节点的数量为第一数量的情况下,采用所述第三线程对所述第三内存块进行释放。

在本申请的一实现方式中,上述确定单元507具体用于执行以下步骤的指令:

若所述期望内存容量大于第二内存容量,则确定所述第二内存池为第三内存池,所述第二内存容量小于所述第一内存容量;

若所述期望内存容量小或等于第二内存容量,则确定所述第二内存池为第四内存池,所述第三内存池包括的内存节点的容量大于所述第四内存池包括的内存节点的容量。

需要说明的是,电子设备的第一接收单元501、分配单元502,记录单元503、第二接收单元504、释放单元505、定义单元506及确定单元507可通过处理器实现。

本申请实施例还提供了一种计算机可读存储介质,其中,所述计算机可读存储介质存储用于电子数据交换的计算机程序,其中,所述计算机程序使得计算机执行如上述方法实施例中电子设备所描述的部分或全部步骤。

本申请实施例还提供了一种计算机程序产品,其中,所述计算机程序产品包括存储了计算机程序的非瞬时性计算机可读存储介质,所述计算机程序可操作来使计算机执行如上述方法中电子设备所描述的部分或全部步骤。该计算机程序产品可以为一个软件安装包。

本申请实施例所描述的方法或者算法的步骤可以以硬件的方式来实现,也可以是由处理器执行软件指令的方式来实现。软件指令可以由相应的软件模块组成,软件模块可以被存放于随机存取存储器(Random Access Memory,RAM)、闪存、只读存储器(Read OnlyMemory,ROM)、可擦除可编程只读存储器(Erasable Programmable ROM,EPROM)、电可擦可编程只读存储器(Electrically EPROM,EEPROM)、寄存器、硬盘、移动硬盘、只读光盘(CD-ROM)或者本领域熟知的任何其它形式的存储介质中。一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于ASIC中。另外,该ASIC可以位于接入网设备、目标网络设备或核心网设备中。当然,处理器和存储介质也可以作为分立组件存在于接入网设备、目标网络设备或核心网设备中。

本领域技术人员应该可以意识到,在上述一个或多个示例中,本申请实施例所描述的功能可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DigitalSubscriber Line,DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如,数字视频光盘(DigitalVideo Disc,DVD))、或者半导体介质(例如,固态硬盘(Solid State Disk,SSD))等。

以上所述的具体实施方式,对本申请实施例的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本申请实施例的具体实施方式而已,并不用于限定本申请实施例的保护范围,凡在本申请实施例的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本申请实施例的保护范围之内。

技术分类

06120112201918