G06F9/50 G06F3/06
1.一种内存分配方法,其特征在于,所述方法包括:
接收目标应用程序发送的动态内存申请请求,所述动态内存申请请求携带所述目标应用程序的标识、所述目标应用程序待申请的第一内存块的大小和所述第一内存块的数量;
基于所述目标应用程序的标识、所述第一内存块的大小和所述第一内存块的数量,从多个预留内存块中为所述目标应用程序分配内存块,所述多个预留内存块是基于多个应用程序的静态内存需求划分出的内存块,所述静态内存需求包括相应的应用程序所需的确定性内存块的大小和数量。
2.如权利要求1所述的方法,其特征在于,所述基于所述目标应用程序的标识、所述第一内存块的大小和所述第一内存块的数量,从多个预留内存块中为所述目标应用程序分配内存块,包括:
基于所述目标应用程序的标识和所述第一内存块的大小,确定所述目标应用程序的可用内存块数量;
在所述第一内存块的数量不大于所述可用内存块数量的情况下,基于所述第一内存块的大小和所述第一内存块的数量,从所述多个预留内存块中为所述目标应用程序分配内存块。
3.如权利要求2所述的方法,其特征在于,所述基于所述目标应用程序的标识和所述第一内存块的大小,确定所述目标应用程序的可用内存块数量,包括:
基于所述目标应用程序的标识和所述第一内存块的大小,从应用程序标识、内存块大小与内存块数量之间的对应关系中,获取对应的内存块数量作为所述可用内存块数量;
所述基于所述第一内存块的大小和所述第一内存块的数量,从所述多个预留内存块中为所述目标应用程序分配内存块之后,所述方法还包括:
基于所述目标应用程序的标识、所述第一内存块的大小和所述第一内存块的数量,更新所述应用程序标识、内存块大小与内存块数量之间的对应关系。
4.如权利要求1-3任一所述的方法,其特征在于,所述接收目标应用程序发送的动态内存申请请求之前,所述方法还包括:
基于所述多个应用程序的静态内存需求,确定所述多个应用程序所需的确定性内存块中每个确定性内存块的大小和总数量;
基于所述每个确定性内存块的大小和总数量,从剩余空闲内存中划分对应的内存块,以得到所述多个预留内存块。
5.如权利要求4所述的方法,其特征在于,所述基于所述每个确定性内存块的大小和总数量,从剩余空闲内存中划分对应的内存块之后,所述方法还包括:
基于所述多个应用程序的静态内存需求,创建应用程序标识、内存块大小与内存块数量之间的对应关系。
6.如权利要求1所述的方法,其特征在于,所述方法还包括:
接收所述目标应用程序发送的动态内存释放请求,所述动态内存释放请求携带所述目标应用程序的标识、所述目标应用程序待释放的第二内存块的大小和所述第二内存块的数量;
基于所述目标应用程序的标识、所述第二内存块的大小和所述第二内存块的数量,释放为所述目标应用程序分配的内存块,并将释放的内存块作为预留内存块。
7.一种内存分配装置,其特征在于,所述装置包括:
第一接收模块,用于接收目标应用程序发送的动态内存申请请求,所述动态内存申请请求携带所述目标应用程序的标识、所述目标应用程序待申请的第一内存块的大小和所述第一内存块的数量;
分配模块,用于基于所述目标应用程序的标识、所述第一内存块的大小和所述第一内存块的数量,从多个预留内存块中为所述目标应用程序分配内存块,所述多个预留内存块是基于多个应用程序的静态内存需求划分出的内存块,所述静态内存需求包括相应的应用程序所需的确定性内存块的大小和数量。
8.一种计算机设备,其特征在于,所述计算机设备包括存储器和处理器,所述存储器用于存放计算机程序,所述处理器用于执行所述存储器上所存放的计算机程序,以实现上述权利要求1-6任一所述方法的步骤。
9.一种计算机可读存储介质,其特征在于,所述存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1-6任一所述的方法的步骤。
10.一种计算机程序产品,包括计算机程序,其特征在于,所述计算机程序包括指令,当所述指令在所述计算机上运行时,使得所述计算机执行权利要求1-6任一项所述方法的步骤。
本申请涉及计算机技术领域,特别涉及一种内存分配方法、装置、设备、存储介质及计算机程序产品。
在操作系统运行应用程序的过程中,需要为应用程序分配内存,进而将应用程序的可执行文件加载至为其分配的内存中,以此来运行应用程序。
在相关技术中,操作系统可以在应用程序运行的过程中,从当前剩余的空闲内存中为应用程序动态地分配内存,以此来提升设备的运行性能。然而,在当前剩余的空闲内存不足的情况下,采用动态内存分配的方式,不可避免地会出现内存分配失败的问题,这样,对确定性要求较高的业务来说,会造成灾难性的恶劣影响。
本申请提供了一种内存分配方法、装置、设备、存储介质及计算机程序产品,可以实现可预期、可控制地分配内存。所述技术方案如下:
一方面,提供了一种内存分配方法,所述方法包括:
接收目标应用程序发送的动态内存申请请求,所述动态内存申请请求携带所述目标应用程序的标识、所述目标应用程序待申请的第一内存块的大小和所述第一内存块的数量;
基于所述目标应用程序的标识、所述第一内存块的大小和所述第一内存块的数量,从多个预留内存块中为所述目标应用程序分配内存块,所述多个预留内存块是基于多个应用程序的静态内存需求划分出的内存块,所述静态内存需求包括相应的应用程序所需的确定性内存块的大小和数量。
可选地,所述基于所述目标应用程序的标识、所述第一内存块的大小和所述第一内存块的数量,从多个预留内存块中为所述目标应用程序分配内存块,包括:
基于所述目标应用程序的标识和所述第一内存块的大小,确定所述目标应用程序的可用内存块数量;
在所述第一内存块的数量不大于所述可用内存块数量的情况下,基于所述第一内存块的大小和所述第一内存块的数量,从所述多个预留内存块中为所述目标应用程序分配内存块。
可选地,所述基于所述目标应用程序的标识和所述第一内存块的大小,确定所述目标应用程序的可用内存块数量,包括:
基于所述目标应用程序的标识和所述第一内存块的大小,从应用程序标识、内存块大小与内存块数量之间的对应关系中,获取对应的内存块数量作为所述可用内存块数量;
所述基于所述第一内存块的大小和所述第一内存块的数量,从所述多个预留内存块中为所述目标应用程序分配内存块之后,所述方法还包括:
基于所述目标应用程序的标识、所述第一内存块的大小和所述第一内存块的数量,更新所述应用程序标识、内存块大小与内存块数量之间的对应关系。
可选地,所述接收目标应用程序发送的动态内存申请请求之前,所述方法还包括:
基于所述多个应用程序的静态内存需求,确定所述多个应用程序所需的确定性内存块中每个确定性内存块的大小和总数量;
基于所述每个确定性内存块的大小和总数量,从剩余空闲内存中划分对应的内存块,以得到所述多个预留内存块。
可选地,所述基于所述每个确定性内存块的大小和总数量,从剩余空闲内存中划分对应的内存块之后,所述方法还包括:
基于所述多个应用程序的静态内存需求,创建应用程序标识、内存块大小与内存块数量之间的对应关系。
可选地,所述方法还包括:
接收所述目标应用程序发送的动态内存释放请求,所述动态内存释放请求携带所述目标应用程序的标识、所述目标应用程序待释放的第二内存块的大小和所述第二内存块的数量;
基于所述目标应用程序的标识、所述第二内存块的大小和所述第二内存块的数量,释放为所述目标应用程序分配的内存块,并将释放的内存块作为预留内存块。
另一方面,提供了一种内存分配装置,所述装置包括:
第一接收模块,用于接收目标应用程序发送的动态内存申请请求,所述动态内存申请请求携带所述目标应用程序的标识、所述目标应用程序待申请的第一内存块的大小和所述第一内存块的数量;
分配模块,用于基于所述目标应用程序的标识、所述第一内存块的大小和所述第一内存块的数量,从多个预留内存块中为所述目标应用程序分配内存块,所述多个预留内存块是基于多个应用程序的静态内存需求划分出的内存块,所述静态内存需求包括相应的应用程序所需的确定性内存块的大小和数量。
可选地,所述分配模块包括:
确定单元,用于基于所述目标应用程序的标识和所述第一内存块的大小,确定所述目标应用程序的可用内存块数量;
分配单元,用于在所述第一内存块的数量不大于所述可用内存块数量的情况下,基于所述第一内存块的大小和所述第一内存块的数量,从所述多个预留内存块中为所述目标应用程序分配内存块。
可选地,所述确定单元具体用于:
基于所述目标应用程序的标识和所述第一内存块的大小,从应用程序标识、内存块大小与内存块数量之间的对应关系中,获取对应的内存块数量作为所述可用内存块数量;
所述分配模块还包括:
更新单元,用于基于所述目标应用程序的标识、所述第一内存块的大小和所述第一内存块的数量,更新所述应用程序标识、内存块大小与内存块数量之间的对应关系。
可选地,所述装置还包括:
确定模块,用于基于所述多个应用程序的静态内存需求,确定所述多个应用程序所需的确定性内存块中每个确定性内存块的大小和总数量;
划分模块,用于基于所述每个确定性内存块的大小和总数量,从剩余空闲内存中划分对应的内存块,以得到所述多个预留内存块。
可选地,所述装置还包括:
创建模块,用于基于所述多个应用程序的静态内存需求,创建应用程序标识、内存块大小与内存块数量之间的对应关系。
可选地,所述装置还包括:
第二接收模块,用于接收所述目标应用程序发送的动态内存释放请求,所述动态内存释放请求携带所述目标应用程序的标识、所述目标应用程序待释放的第二内存块的大小和所述第二内存块的数量;
释放模块,用于基于所述目标应用程序的标识、所述第二内存块的大小和所述第二内存块的数量,释放为所述目标应用程序分配的内存块,并将释放的内存块作为预留内存块。
另一方面,提供了一种计算机设备,所述计算机设备包括存储器和处理器,所述存储器用于存放计算机程序,所述处理器用于执行所述存储器上所存放的计算机程序,以实现上述所述的内存分配方法的步骤。
另一方面,提供了一种计算机可读存储介质,所述存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述所述内存分配方法的步骤。
另一方面,提供了一种包含指令的计算机程序产品,当所述指令在计算机上运行时,使得计算机执行上述所述的内存分配方法的步骤。
本申请提供的技术方案至少可以带来以下有益效果:
由于该多个预留内存块是基于多个应用程序的静态内存需求划分出的内存块,即,在该多个应用程序运行之前,通过静态内存分配的方式,为各个应用程序预留可以满足后续正常运行所必需的内存块。这样,在目标应用程序运行的过程中,通过动态内存分配的方式,从该多个预留内存块中实时地为目标应用程序分配内存块,从而可以避免在应用程序运行过程中,由于动态内存分配失败导致的灾难性后果。也就是说,本申请实施例提供了一种新的内存分配机制,通过静态内存分配和动态内存分配之间的协同作用,实现可预期、可控制地分配内存。
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种计算机设备的架构示意图;
图2是本申请实施例提供的一种内存分配方法的流程图;
图3是本申请实施例提供的一种计算机设备启动流程的示意图;
图4是本申请实施例提供的一种内存分配装置的结构示意图;
图5是本申请实施例提供的一种计算机设备的结构示意图。
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
在对本申请实施例提供的内存分配方法进行详细地解释说明之前,先对本申请实施例提供的应用场景和系统架构进行介绍。
首先对本申请实施例的应用场景进行介绍。
本申请实施例提供的内存分配方法可以应用于多种场景,例如,在服务器、云计算等领域,通常从当前剩余的空闲内存中为应用程序动态地分配内存。然而,在当前剩余的空闲内存不足的情况下,容易出现内存分配失败的问题。此时,可以通过本申请实施例提供的内存分配方法为应用程序分配内存块。
又例如,在航天航空、智能驾驶、车载OS(Operating System,操作系统)和OSEK OS等对业务准确性要求极高的领域,为了避免因动态内存分配而出现内存分配失败的问题,从而造成灾难性的恶劣影响,通常在应用程序的编译过程中为应用程序静态地分配内存,从而为应用程序提供确定性的内存。但是对于同一应用程序来说,不同的业务类型可能需要不同的内存,所以采用静态内存分配的方式,无法满足高实时、高性能的多业务需求,即无法在有限的资源上支持更多的业务需求。此时,可以通过本申请实施例提供的内存分配方法为应用程序分配内存块。
其次对本申请实施例的系统架构进行介绍。
请参考图1,图1是根据一示例性实施例示出的一种计算机设备的架构示意图。该计算机设备包括多个应用程序101(图1中以1个应用程序示意性说明,该应用程序为目标应用程序)和内存分配器102,目标应用程序101可以与内存分配器102进行交互,在计算机设备通过操作系统运行目标应用程序101的过程中,通过内存分配器102为目标应用程序101分配内存。
目标应用程序101用于向内存分配器102发送动态内存申请请求,该动态内存申请请求携带目标应用程序101的标识、目标应用程序101待申请的第一内存块的大小和第一内存块的数量。内存分配器102接收到目标应用程序101发送的该动态内存申请请求之后,基于目标应用程序101的标识、第一内存块的大小和第一内存块的数量,从多个预留内存块中为目标应用程序101分配内存块。
其中,该多个预留内存块是内存分配器102基于该多个应用程序的静态内存需求划分出的内存块,静态内存需求包括相应的应用程序所需的确定性内存块的大小和数量。也即是,内存分配器102基于该多个应用程序的静态内存需求,确定该多个应用程序所需的确定性内存块中每个确定性内存块的大小和总数量。然后,基于每个确定性内存块的大小和总数量,从剩余空闲内存中划分对应的内存块,以得到该多个预留内存块。
其中,目标应用程序101可以是任何一种计算机程序,例如文本录入、视频播放等。内存分配器102是一种硬件设备或软件程序,例如Dlmalloc内存分配软件等。
计算机设备可以是任何一种可与用户通过键盘、触摸板、触摸屏、遥控器、语音交互或手写设备等一种或多种方式进行人机交互的电子产品,例如PC(Personal Computer,个人计算机)、手机、智能手机、PDA(Personal Digital Assistant,个人数字助手)、可穿戴设备、掌上电脑PPC(Pocket PC)、平板电脑、智能车机、智能电视、智能音箱等。
本领域技术人员应能理解上述目标应用程序101、内存分配器102和计算机设备仅为举例,其他现有的或今后可能出现的应用程序、内存分配器或计算机设备如可适用于本申请实施例,也应包含在本申请实施例保护范围以内,并在此以引用方式包含于此。
需要说明的是,本申请实施例描述的应用场景以及系统架构是为了更加清楚的说明本申请实施例的技术方案,并不构成对于本申请实施例提供的技术方案的限定,本领域普通技术人员可知,随着系统架构的演变和新应用场景的出现,本申请实施例提供的技术方案对于类似的技术问题,同样适用。
接下来对本申请实施例提供的内存分配方法进行详细地解释说明。
图2是本申请实施例提供的一种内存分配方法的流程图,请参考图2,该方法包括如下步骤。
步骤201:接收目标应用程序发送的动态内存申请请求,该动态内存申请请求携带目标应用程序的标识、目标应用程序待申请的第一内存块的大小和第一内存块的数量。
内存分配器提供有动态内存申请接口,在目标应用程序运行的过程中,目标应用程序可以通过调用该动态内存申请接口,向内存分配器发送动态内存申请请求。当然,目标应用程序还可以通过其他方式向内存分配器发送动态内存申请请求,本申请实施例对此不做限定。
在一些实施例中,接收目标应用程序发送的动态内存申请请求之前,还需要基于该多个应用程序的静态内存需求,确定该多个应用程序所需的确定性内存块中每个确定性内存块的大小和总数量。基于每个确定性内存块的大小和总数量,从剩余空闲内存中划分对应的内存块,以得到该多个预留内存块。
应用程序具有对应的配置文件,该配置文件存储有该应用程序的静态内存需求。所以,内存分配器可以依次扫描该多个应用程序对应的配置文件,从而获取到该多个应用程序的静态内存需求。当然,通过扫描配置文件来获取应用程序的静态内存需求只是一种示例,实际应用中,还可以通过其他的方式来获取应用程序的静态内存需求。比如,该多个应用程序的静态内存需求被存储至指定位置,内存分配器通过访问指定位置,能够获取到该多个应用程序的静态内存需求。
需要说明的是,该多个应用程序的静态内存需求是管理员/程序开发人员按照相关算法确定的。以管理员为例,在管理员将该多个应用程序部署在计算机设备之前,按照相关算法分别确定该多个应用程序的静态内存需求,并将每个应用程序的静态内存需求存储至相应的应用程序对应的配置文件中。或者,将该多个应用程序的静态内存需求统一存储在指定位置。
由于每个应用程序的静态内存需求包括相应的应用程序所需的确定性内存块的大小和数量,所以,在获取到该多个应用程序的静态内存需求之后,可以统计该多个应用程序所需的确定性内存块中每个确定性内存块的大小和总数量。进而按照每个确定性内存块的大小和总数量,从剩余空闲内存中划分对应的内存块,以得到该多个预留内存块。其中,确定性内存块是指为了保障应用程序的正常运行所必需的内存块。
比如,该多个应用程序包括应用程序A和应用程序B。应用程序A的静态内存需求如表1所示,应用程序B的静态内存需求如表2所示。从表1可以看出,应用程序A所需的确定性内存块包括8块大小为16K(千)字节的确定性内存块,以及4块大小为2M(兆)字节的确定性内存块。从表2可以看出,应用程序B所需的确定性内存块包括4块大小为16K字节的确定性内存块,以及2块大小为1M字节的确定性内存块。
通过对应用程序A和应用程序B所需的确定性内存块的大小和数量进行统计,能够确定应用程序A和应用程序B所需的确定性内存块中,大小为16K字节的确定性内存块的总数量为12,大小为2M字节的确定性内存块的总数量为4,大小为1M字节的确定性内存块的总数量为2。此时,从剩余空闲内存中划分出的多个预留内存块包括12块大小为16K字节的预留内存块、4块大小为2M字节的预留内存块,以及2块大小为1M字节的预留内存块。
表1
应用程序A的静态内存需求 program_A_conf mem1_size=16*1024 mem1_num=8 mem2_size=2*1024*1024 mem2_num=4
表2
划分出该多个预留内存块之后,还可以基于该多个应用程序的静态内存需求,创建应用程序标识、内存块大小与内存块数量之间的对应关系。即,对于该多个应用程序中的任一应用程序,创建该应用程序的标识、该应用程序所需的每个确定性内存块的大小、以及该应用程序所需的每个确定性内存块的数量之间的对应关系。这样,通过该对应关系可以记录具有该多个预留内存块的使用权限的应用程序,以及每个应用程序能够使用的预留内存块的大小和数量。
比如,以该多个应用程序包括应用程序A和应用程序B为例。在划分出该多个预留内存块之后,可以创建如下表3所示的应用程序标识、内存块大小与内存块数量之间的对应关系。
表3
应用程序标识 内存块大小 内存块数量 A 16K字节 8 A 2M字节 4 B 16K字节 4 B 1M字节 2
其中,应用程序标识用于唯一标识该应用程序,该应用程序标识可以是该应用程序的编号、名称以及功能描述等等,或者通过这些信息进行组合得到。
在一些实施例中,内存分配器从剩余空闲内存中划分出该多个预留内存块之后,可以为该多个预留内存块设置对应的标签信息。即,该多个预留内存块中的每个预留内存块均具有标签信息,该标签信息用于指示相应的预留内存块不被释放。
由于该多个预留内存块是基于该多个应用程序的静态内存需求划分出的内存块,即该多个预留内存块均处于“空闲”状态。但是通常情况下,在某个内存块从“正在使用”状态变为“空闲”状态之后,内存分配器就会将“空闲”状态的内存块释放,以便于内存分配器将“空闲”状态的内存块继续分配给其他应用程序。所以,为了避免内存分配器将该多个预留内存块释放,可以为该多个预留内存块设置对应的标签信息,从而为该多个预留内存块提供保护机制。当然,在实际应用中,还可以通过其他的方式避免该多个预留内存块被释放,本申请实施例对此不做限定。
上述内容是确定出该多个应用程序所需的确定性内存块中每个确定性内存块的大小和总数量之后,直接从剩余空闲内存中划分对应的内存块。但是,在实际应用中,该剩余空闲内存的大小可能小于该多个应用程序所需的确定性内存块的大小和总数量之积的情况,即剩余空闲内存无法满足该多个应用程序的静态内存需求。此时,可以显示提示消息,该提示消息用于提示管理员该多个应用程序的静态内存需求不合理,以及提示管理员停止启动计算机设备。
也就是说,如图3所示,图3是本申请实施例提供的一种计算机设备启动流程的示意图。在计算机设备启动之前,部署在计算机设备上的内存分配器获取该多个应用程序的静态内存需求,并将该多个应用程序的静态内存需求与剩余空闲内存进行比较。在剩余空闲内存可以满足该多个应用程序的静态内存需求的情况下,从剩余空闲内存中划分该多个预留内存块,并启动计算机设备。在剩余空闲内存无法满足该多个应用程序的静态内存需求的情况下,停止启动计算机设备。即,在该多个应用程序运行之前,通过静态内存分配的方式,一次性为各个应用程序预留可以满足各个应用程序后续正常运行所必需的内存块,从而避免在各个应用程序运行过程中,由于动态内存分配失败导致的灾难性后果。换句话说,在计算机设备启动时,按照各个应用程序的静态内存需求为各个应用程序预留确定性内存块,并不需要考虑当前业务类型。即使某一应用程序在计算机设备启动时并不需要运行,也需要在计算机设备启动时,为该应用程序预留内存块。
在剩余空闲内存无法满足该多个应用程序的静态内存需求的情况下,管理员还可以结合该提示消息,采用OTA(Over The Air Technology,空中下载技术),通过通信接口实时地调整该多个应用程序中每个应用程序的静态内存需求。
需要说明的是,在剩余空闲内存无法满足该多个应用程序的静态内存需求的情况下,直接停止启动计算机设备仅为一种示例。在另一些实施例中,由于该多个应用程序包括必要应用程序和非必要应用程序,在剩余空闲内存无法满足该多个应用程序的静态内存需求的情况下,可以优先基于必要应用程序所需的确定性内存块的大小和总数量,从剩余空闲内存中划分对应的内存块,以此来保障必要应用程序的正常运行。
基于上文描述,每个应用程序具有对应的配置文件,该配置文件中可以存储相应的应用程序的标签信息,该标签信息指示该应用程序为必要应用程序,还是非必要应用程序。当然,在实际应用中,还可以通过其他的方式来确定应用程序为必要应用程序,还是非必要应用程序,本申请实施例对此不做限定。
其中,必要应用程序是指为了保障计算机设备的正常运行所必需的应用程序。例如,在智能驾驶领域,车辆制动程序为必要应用程序,音乐播放器为非必要应用程序。
步骤202:基于目标应用程序的标识、第一内存块的大小和第一内存块的数量,从该多个预留内存块中为目标应用程序分配内存块。
在一些实施例中,基于目标应用程序的标识和第一内存块的大小,确定目标应用程序的可用内存块数量。在第一内存块的数量不大于可用内存块数量的情况下,基于第一内存块的大小和第一内存块的数量,从该多个预留内存块中为目标应用程序分配内存块。
其中,基于目标应用程序的标识和第一内存块的大小,确定目标应用程序的可用内存块数量的实现过程包括:基于目标应用程序的标识和第一内存块的大小,从应用程序标识、内存块大小与内存块数量之间的对应关系中,获取对应的内存块数量作为可用内存块数量。即,从应用程序标识、内存块大小与内存块数量之间的对应关系中,获取目标应用程序的标识以及第一内存块的大小所对应的内存块数量,并将获取的内存块数量确定为可用内存块数量。
由于应用程序标识、内存块大小与内存块数量之间的对应关系用于记录具有预留内存块的使用权限的应用程序,以及每个应用程序能够使用的预留内存块的大小和数量,所以,在目标应用程序申请第一内存块时,可以通过该对应关系确定目标应用程序的可用内存块数量。这样,可以限制目标应用程序可申请的内存块的大小和数量,避免目标应用程序未经授权而申请其他应用程序所对应的内存块。
在第一内存块的数量不大于可用内存块数量的情况下,表明目标应用程序当前可用的内存块可以满足目标应用程序当前申请的内存块。此时,可以基于第一内存块的大小和第一内存块的数量,从该多个预留内存块中为目标应用程序分配大小为第一内存块的大小,且数量为第一内存块的数量的内存块。即,在目标应用程序运行的过程中,通过动态内存分配的方式,实时地为目标应用程序分配内存块。
例如,以目标应用程序为上述应用程序A为例,应用程序A待申请的第一内存块的大小为2M字节,第一内存块的数量为4。此时,基于应用程序A的标识和第一内存块的大小,从应用程序标识、内存块大小与内存块数量之间的对应关系中,确定应用程序A对应的大小为2M字节的内存块有4块。即,应用程序A的可用内存块数量为4。由于应用程序A待申请的第一内存块的数量不大于该可用内存块数量,所以,可以从该多个预留内存块中为应用程序A分配4块大小为2M字节的内存块。
在第一内存块的数量大于可用内存块数量的情况下,表明目标应用程序当前可用的内存块无法满足目标应用程序当前申请的内存块。此时,内存分配器向目标应用程序发送提示消息,该提示消息用于提示目标应用程序当前申请的内存块不合理。
基于上文描述,从剩余空闲内存中划分出该多个预留内存块之后,该多个预留内存块中的每个预留内存块均处于“空闲”状态。但是在目标应用程序申请内存块之前,还可能存在其他应用程序已经申请过内存块,此时,该多个预留内存块中可能存在处于“空闲”状态的内存块,也可能存在处于“正在使用”状态的内存块。所以,可以从该多个预留内存块中处于“空闲”状态的内存块中,为目标应用程序分配内存块。而且,在从该多个预留内存块中为目标应用程序分配内存块之后,还可以将该多个预留内存块中为目标应用程序分配的内存块的状态由“空闲”状态转变为“正在使用”状态。
需要说明的是,内存分配器可以通过多种实现方式来表征预留内存块的状态为“空闲”状态还是“正在使用”状态。例如,该多个预留内存块被划分为第一内存组和第二内存组,位于第一内存组内的各个内存块的状态均为“空闲”状态,位于第二内存组内的各个内存块的状态均为“正在使用”状态。即,基于各个内存块所属的组别,确定各个内存块的状态。又例如,每个内存块对应一个信号位,通过该信号位的不同取值来表征内存块的状态。比如,在某个内存块对应的信号位的取值为1时,确定该内存块处于“正在使用”状态,在该内存块对应的信号位的取值为0时,确定该内存块处于“空闲”状态。
在一些实施例中,基于第一内存块的大小和第一内存块的数量,从该多个预留内存块中为目标应用程序分配内存块之后,还可以基于目标应用程序的标识、第一内存块的大小和第一内存块的数量,更新应用程序标识、内存块大小与内存块数量之间的对应关系。即,将应用程序标识、内存块大小与内存块数量之间的对应关系中,与目标应用程序的标识和第一内存块的大小对应的内存块数量减去第一内存块的数量,以得到更新后的应用程序标识、内存块大小与内存块数量之间的对应关系。
可选地,在目标应用程序运行结束之后,内存分配器还可以将已分配给目标应用程序的内存块释放至该多个预留内存块中。即,接收目标应用程序发送的动态内存释放请求,该动态内存释放请求携带目标应用程序的标识、目标应用程序待释放的第二内存块的大小和第二内存块的数量。基于目标应用程序的标识、第二内存块的大小和第二内存块的数量,释放为目标应用程序分配的内存块,并将释放的内存块作为预留内存块。
在一些实施例中,可以基于目标应用程序的标识、第二内存块的大小和第二内存块的数量,释放为目标应用程序分配的大小为第二内存块的大小且数量为第二内存块的数量的内存块,并将释放的内存块的状态由“正在使用”状态转变为“空闲”状态,进而将释放的内存块作为预留内存块。
释放为目标应用程序分配的内存块,并将释放的内存块作为预留内存块之后,还可以基于目标应用程序的标识、第二内存块的大小和第二内存块的数量,更新应用程序标识、内存块大小与内存块数量之间的对应关系。即,将应用程序标识、内存块大小与内存块数量之间的对应关系中,与目标应用程序的标识和第二内存块的大小对应的内存块数量加上第二内存块的数量,以得到更新后的应用程序标识、内存块大小与内存块数量之间的对应关系。
在本申请实施例中,由于该多个预留内存块是基于多个应用程序的静态内存需求划分出的内存块,即,在该多个应用程序运行之前,通过静态内存分配的方式,为各个应用程序预留可以满足后续正常运行所必需的内存块。这样,在目标应用程序运行的过程中,通过动态内存分配的方式,从该多个预留内存块中实时地为目标应用程序分配内存块,从而可以避免在应用程序运行过程中,由于动态内存分配失败导致的灾难性后果。也就是说,本申请实施例提供了一种新的内存分配机制,通过静态内存分配和动态内存分配之间的协同作用,实现可预期、可控制地分配内存。
此外,由于本申请实施例是在将该多个应用程序部署于计算机设备之前,获取该多个应用程序的静态内存需求。这样,在剩余空闲内存无法满足该多个应用程序的静态内存需求的情况下,管理员还可以实时地调整该多个应用程序中每个应用程序的静态内存需求。同时,由于某个内存块并没有与某个应用程序绑定,处于“空闲”状态的各个内存块均可以被符合要求的应用程序调用,从而有利于内存分配器进行额外的资源管理和内存块调用。
图4是本申请实施例提供的一种内存分配装置的结构示意图,该内存分配装置可以由软件、硬件或者两者的结合实现成为内存分配器的部分或者全部。请参考图4,该装置包括:第一接收模块401和分配模块402。
第一接收模块401,用于接收目标应用程序发送的动态内存申请请求,该动态内存申请请求携带目标应用程序的标识、目标应用程序待申请的第一内存块的大小和第一内存块的数量。详细实现过程参考上述各个实施例中对应的内容,此处不再赘述。
分配模块402,用于基于目标应用程序的标识、第一内存块的大小和第一内存块的数量,从多个预留内存块中为目标应用程序分配内存块,该多个预留内存块是基于多个应用程序的静态内存需求划分出的内存块,静态内存需求包括相应的应用程序所需的确定性内存块的大小和数量。详细实现过程参考上述各个实施例中对应的内容,此处不再赘述。
可选地,分配模块402包括:
确定单元,用于基于目标应用程序的标识和第一内存块的大小,确定目标应用程序的可用内存块数量;
分配单元,用于在第一内存块的数量不大于可用内存块数量的情况下,基于第一内存块的大小和第一内存块的数量,从该多个预留内存块中为目标应用程序分配内存块。
可选地,确定单元具体用于:
基于目标应用程序的标识和第一内存块的大小,从应用程序标识、内存块大小与内存块数量之间的对应关系中,获取对应的内存块数量作为可用内存块数量;
分配模块402还包括:
更新单元,用于基于目标应用程序的标识、第一内存块的大小和第一内存块的数量,更新应用程序标识、内存块大小与内存块数量之间的对应关系。
可选地,该装置还包括:
确定模块,用于基于该多个应用程序的静态内存需求,确定该多个应用程序所需的确定性内存块中每个确定性内存块的大小和总数量;
划分模块,用于基于每个确定性内存块的大小和总数量,从剩余空闲内存中划分对应的内存块,以得到该多个预留内存块。
可选地,该装置还包括:
创建模块,用于基于该多个应用程序的静态内存需求,创建应用程序标识、内存块大小与内存块数量之间的对应关系。
可选地,该装置还包括:
第二接收模块,用于接收目标应用程序发送的动态内存释放请求,该动态内存释放请求携带目标应用程序的标识、目标应用程序待释放的第二内存块的大小和第二内存块的数量;
释放模块,用于基于目标应用程序的标识、第二内存块的大小和第二内存块的数量,释放为目标应用程序分配的内存块,并将释放的内存块作为预留内存块。
在本申请实施例中,由于该多个预留内存块是基于多个应用程序的静态内存需求划分出的内存块,即,在该多个应用程序运行之前,通过静态内存分配的方式,为各个应用程序预留可以满足后续正常运行所必需的内存块。这样,在目标应用程序运行的过程中,通过动态内存分配的方式,从该多个预留内存块中实时地为目标应用程序分配内存块,从而可以避免在应用程序运行过程中,由于动态内存分配失败导致的灾难性后果。也就是说,本申请实施例提供了一种新的内存分配机制,通过静态内存分配和动态内存分配之间的协同作用,实现可预期、可控制地分配内存。
此外,由于本申请实施例是在将该多个应用程序部署于计算机设备之前,获取该多个应用程序的静态内存需求。这样,在剩余空闲内存无法满足该多个应用程序的静态内存需求的情况下,管理员还可以实时地调整该多个应用程序中每个应用程序的静态内存需求。同时,由于某个内存块并没有与某个应用程序绑定,处于“空闲”状态的各个内存块均可以被符合要求的应用程序调用,从而有利于内存分配器进行额外的资源管理和内存块调用。
需要说明的是:上述实施例提供的内存分配装置在进行内存分配时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的内存分配装置与内存分配方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
图5是本申请实施例提供的一种计算机设备500的结构框图。该计算机设备500可以是便携式移动终端,比如:智能手机、平板电脑、MP3播放器(Moving Picture ExpertsGroup Audio Layer III,动态影像专家压缩标准音频层面3)、MP4(Moving PictureExperts Group Audio Layer IV,动态影像专家压缩标准音频层面4)播放器、笔记本电脑或台式电脑。计算机设备500还可能被称为用户设备、便携式终端、膝上型终端、台式终端等其他名称。
通常,计算机设备500包括有:处理器501和存储器502。
处理器501可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器501可以采用DSP(Digital Signal Processing,数字信号处理)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)、PLA(Programmable Logic Array,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器501也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称CPU(Central ProcessingUnit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器501可以在集成有GPU(Graphics Processing Unit,图像处理器),GPU用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器501还可以包括AI(Artificial Intelligence,人工智能)处理器,该AI处理器用于处理有关机器学习的计算操作。
存储器502可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器502还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器502中的非暂态的计算机可读存储介质用于存储至少一个指令,该至少一个指令用于被处理器501所执行以实现本申请中方法实施例提供的内存分配方法。
在一些实施例中,计算机设备500还可选包括有:外围设备接口503和至少一个外围设备。处理器501、存储器502和外围设备接口503之间可以通过总线或信号线相连。各个外围设备可以通过总线、信号线或电路板与外围设备接口503相连。具体地,外围设备包括:射频电路504、触摸显示屏505、摄像头506、音频电路507、定位组件508和电源509中的至少一种。
外围设备接口503可被用于将I/O(Input/Output,输入/输出)相关的至少一个外围设备连接到处理器501和存储器502。在一些实施例中,处理器501、存储器502和外围设备接口503被集成在同一芯片或电路板上;在一些其他实施例中,处理器501、存储器502和外围设备接口503中的任意一个或两个可以在单独的芯片或电路板上实现,本实施例对此不加以限定。
射频电路504用于接收和发射RF(Radio Frequency,射频)信号,也称电磁信号。射频电路504通过电磁信号与通信网络以及其他通信设备进行通信。射频电路504将电信号转换为电磁信号进行发送,或者,将接收到的电磁信号转换为电信号。可选地,射频电路504包括:天线系统、RF收发器、一个或多个放大器、调谐器、振荡器、数字信号处理器、编解码芯片组、用户身份模块卡等等。射频电路504可以通过至少一种无线通信协议来与其它计算机设备进行通信。该无线通信协议包括但不限于:万维网、城域网、内联网、各代移动通信网络(2G、3G、4G及5G)、无线局域网和/或WiFi(Wireless Fidelity,无线保真)网络。在一些实施例中,射频电路504还可以包括NFC(Near Field Communication,近距离无线通信)有关的电路,本申请实施例对此不加以限定。
显示屏505用于显示UI(User Interface,用户界面)。该UI可以包括图形、文本、图标、视频及其它们的任意组合。当显示屏505是触摸显示屏时,显示屏505还具有采集在显示屏505的表面或表面上方的触摸信号的能力。该触摸信号可以作为控制信号输入至处理器501进行处理。此时,显示屏505还可以用于提供虚拟按钮和/或虚拟键盘,也称软按钮和/或软键盘。在一些实施例中,显示屏505可以为一个,设置计算机设备500的前面板;在另一些实施例中,显示屏505可以为至少两个,分别设置在计算机设备500的不同表面或呈折叠设计;在再一些实施例中,显示屏505可以是柔性显示屏,设置在计算机设备500的弯曲表面上或折叠面上。甚至,显示屏505还可以设置成非矩形的不规则图形,也即异形屏。显示屏505可以采用LCD(Liquid Crystal Display,液晶显示屏)、OLED(Organic Light-EmittingDiode,有机发光二极管)等材质制备。
摄像头组件506用于采集图像或视频。可选地,摄像头组件506包括前置摄像头和后置摄像头。通常,前置摄像头设置在计算机设备的前面板,后置摄像头设置在计算机设备的背面。在一些实施例中,后置摄像头为至少两个,分别为主摄像头、景深摄像头、广角摄像头、长焦摄像头中的任意一种,以实现主摄像头和景深摄像头融合实现背景虚化功能、主摄像头和广角摄像头融合实现全景拍摄以及VR(Virtual Reality,虚拟现实)拍摄功能或者其它融合拍摄功能。在一些实施例中,摄像头组件506还可以包括闪光灯。闪光灯可以是单温闪光灯,也可以是双温闪光灯。双温闪光灯是指暖光闪光灯和冷光闪光灯的组合,可以用于不同温下的光线补偿。
音频电路507可以包括麦克风和扬声器。麦克风用于采集用户及环境的声波,并将声波转换为电信号输入至处理器501进行处理,或者输入至射频电路504以实现语音通信。出于立体声采集或降噪的目的,麦克风可以为多个,分别设置在计算机设备500的不同部位。麦克风还可以是阵列麦克风或全向采集型麦克风。扬声器则用于将来自处理器501或射频电路504的电信号转换为声波。扬声器可以是传统的薄膜扬声器,也可以是压电陶瓷扬声器。当扬声器是压电陶瓷扬声器时,不仅可以将电信号转换为人类可听见的声波,也可以将电信号转换为人类听不见的声波以进行测距等用途。在一些实施例中,音频电路507还可以包括耳机插孔。
定位组件508用于定位计算机设备500的当前地理位置,以实现导航或LBS(Location Based Service,基于位置的服务)。定位组件508可以是基于美国的GPS(GlobalPositioning System,全球定位系统)、中国的北斗系统或俄罗斯的伽利略系统的定位组件。
电源509用于为计算机设备500中的各个组件进行供电。电源509可以是交流电、直流电、一次性电池或可充电电池。当电源509包括可充电电池时,该可充电电池可以是有线充电电池或无线充电电池。有线充电电池是通过有线线路充电的电池,无线充电电池是通过无线线圈充电的电池。该可充电电池还可以用于支持快充技术。
本领域技术人员可以理解,图5中示出的结构并不构成对计算机设备500的限定,可以包括比图示更多或更少的组件,或者组合某些组件,或者采用不同的组件布置。
在一些实施例中,还提供了一种计算机可读存储介质,该存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述实施例中内存分配方法的步骤。例如,所述计算机可读存储介质可以是ROM、RAM、CD-ROM、磁带、软盘和光数据存储设备等。
值得注意的是,本申请实施例提到的计算机可读存储介质可以为非易失性存储介质,换句话说,可以是非瞬时性存储介质。
应当理解的是,实现上述实施例的全部或部分步骤可以通过软件、硬件、固件或者其任意结合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。所述计算机指令可以存储在上述计算机可读存储介质中。
也即是,在一些实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述所述的内存分配方法的步骤。
应当理解的是,本文提及的“至少一个”是指一个或多个,“多个”是指两个或两个以上。在本申请实施例的描述中,除非另有说明,“/”表示或的意思,例如,A/B可以表示A或B;本文中的“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,为了便于清楚描述本申请实施例的技术方案,在本申请的实施例中,采用了“第一”、“第二”等字样对功能和作用基本相同的相同项或相似项进行区分。本领域技术人员可以理解“第一”、“第二”等字样并不对数量和执行次序进行限定,并且“第一”、“第二”等字样也并不限定一定不同。
需要说明的是,本申请实施例所涉及的信息(包括但不限于用户设备信息、用户个人信息等)、数据(包括但不限于用于分析的数据、存储的数据、展示的数据等)以及信号,均为经用户授权或者经过各方充分授权的,且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准。例如,本申请实施例中涉及到的目标应用程序的动态内存申请请求,以及多个应用程序的静态内存需求都是在充分授权的情况下获取的。
以上所述为本申请提供的实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
本文发布于:2023-04-14 06:45:29,感谢您对本站的认可!
本文链接:https://patent.en369.cn/patent/4/86353.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |