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

一种内存分配控制方法、装置、设备及存储介质

文献发布时间:2023-06-19 10:58:46


一种内存分配控制方法、装置、设备及存储介质

技术领域

本申请涉及计算机应用技术领域,特别是涉及一种内存分配控制方法、装置、设备及存储介质。

背景技术

随着计算机技术的快速发展,工业现场自动化、智能化的发展速度也越来越快,业务组态对DCS(Distributed Control System,分布式控制系统)等组态软件提出了更高的要求,比如,对实时调试、增量下装等功能的需求更加强烈。频繁修改逻辑、增删变量进行增量下装等操作需要不断进行内存申请。

目前,在进行控制系统的内存分配时,会随机找到一个总内存大小大于申请内存大小的空闲内存块进行内存分配,容易产生内存碎片,而内存碎片的增多将会加重资源紧张的问题。

所以,如何进行内存分配控制,尽量减少内存碎片的产生,是目前本领域技术人员急需解决的技术问题。

发明内容

本申请的目的是提供一种内存分配控制方法、装置、设备及存储介质,以尽量减少内存碎片的产生,缓解资源紧张问题。

为解决上述技术问题,本申请提供如下技术方案:

一种内存分配控制方法,包括:

接收申请方发送的内存申请,所述内存申请中携带申请内存大小的信息;

遍历空闲内存块列表,查找总内存大小与所述申请内存大小相同的空闲内存块;

在查找到的空闲内存块中分配内存给所述申请方。

在本申请的一种具体实施方式中,在所述遍历空闲内存块列表之后,还包括:

如果未查找到总内存大小与所述申请内存大小相同的空闲内存块,则根据所述申请内存大小,确定待分配集合,所述待分配集合中的每个空闲内存块的总内存大小与所述申请内存大小的比值大于设定比例阈值;

在所述待分配集合中选择一个空闲内存块,分配内存给所述申请方。

在本申请的一种具体实施方式中,所述在所述待分配集合中选择一个空闲内存块,分配内存给所述申请方,包括:

在所述待分配集合中选择总内存大小最大的空闲内存块,分配内存给所述申请方。

在本申请的一种具体实施方式中,还包括:

获得回收内存块;

根据所述回收内存块的地址,确定所述空闲内存块列表中是否存在地址连续的内存块;

如果存在,则将所述地址连续的内存块进行合并处理。

在本申请的一种具体实施方式中,所述空闲内存块列表中的空闲内存块按照地址前后顺序排列。

在本申请的一种具体实施方式中,所述申请方为结构体对象,所述内存申请中携带所述结构体对象包含的每个字段的申请内存大小的信息;

所述查找总内存大小与所述申请内存大小相同的空闲内存块,包括:

针对所述结构体对象包含的每个字段,查找总内存大小与当前字段的申请内存大小相同的空闲内存块;

相应的,所述将查找到的空闲内存块分配给所述申请方,包括:

针对所述结构体对象包含的每个字段,将查找到的总内存大小与当前字段的申请内存大小相同的空闲内存块的内存分配给当前字段。

一种内存分配控制装置,包括:

内存申请接收模块,用于接收申请方发送的内存申请,所述内存申请中携带申请内存大小的信息;

空闲内存块查找模块,用于遍历空闲内存块列表,查找总内存大小与所述申请内存大小相同的空闲内存块;

内存分配模块,用于在查找到的空闲内存块中分配内存给所述申请方。

在本申请的一种具体实施方式中,所述内存分配模块,还用于:

在所述遍历空闲内存块列表之后,如果未查找到总内存大小与所述申请内存大小相同的空闲内存块,则根据所述申请内存大小,确定待分配集合,所述待分配集合中的每个空闲内存块的总内存大小与所述申请内存大小的比值大于设定比例阈值;

在所述待分配集合中选择一个空闲内存块,分配内存给所述申请方。

一种内存分配控制设备,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序时实现上述任一项所述内存分配控制方法的步骤。

一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述任一项所述内存分配控制方法的步骤。

应用本申请实施例所提供的技术方案,在接收到申请方发送的内存申请时,遍历空闲内存块列表,查找总内存大小与申请内存大小相同的空闲内存块,在查找到的空闲内存块中分配内存给申请方,这样可以尽量避免内存碎片的产生,缓解资源紧张的问题。

附图说明

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

图1为本申请实施例中一种内存分配控制方法的实施流程图;

图2为本申请实施例中空闲内存块列表的一种示意图;

图3为本申请实施例中空闲内存块列表的另一种示意图;

图4为本申请实施例中空闲内存块列表的另一种示意图;

图5为本申请实施例中进行回收合并处理的空闲内存块列表的示意图;

图6为本申请实施例中不做回收合并处理的空闲内存块列表的示意图;

图7为本申请实施例中一种内存分配控制装置的结构示意图;

图8为本申请实施例中一种内存分配控制设备的结构示意图。

具体实施方式

本申请的核心是提供一种内存分配控制方法,通过对内存分配控制,尽量减少内存碎片的产生。实际上,内存碎片不只是在控制系统中存在,在上位机中也有涉及。上位机是控制系统的逻辑组态软件,主要进行控制逻辑的编写组态。

在本申请中,接收到申请方发送的内存申请后,遍历空闲内存块列表,查找总内存大小与申请内存大小相同的空闲内存块,在查找到的空闲内存块中分配内存给申请方。也就是查找到刚好的可利用的空闲内存块进行内存分配,可以尽量减少内存碎片的产生,缓解资源紧张问题。

为了使本技术领域的人员更好地理解本申请方案,下面结合附图和具体实施方式对本申请作进一步的详细说明。显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

参见图1所示,为本申请实施例所提供的一种控制系统的内存分配方法的实施流程图,该方法可以包括以下步骤:

S110:接收申请方发送的内存申请。

内存申请中携带申请内存大小的信息。

在本申请实施例中,申请方可以是有内存申请需求的任意一方,如业务方、控制方等。申请方在有内存申请需求时,可以发出相应的内存申请,在内存申请中可以携带申请内存大小的信息。

接收到申请方发送的内存申请的情况下,可以继续执行后续步骤的操作。

S120:遍历空闲内存块列表,查找总内存大小与申请内存大小相同的空闲内存块。

在实际应用中,可以将空闲内存块通过列表的形式进行管理,空闲内存块列表中可以包括当前所有的空闲内存块,不同空闲内存块的总内存大小可能相同或不同。如图2中,空闲内存块列表包括四个空闲内存块,总内存大小分别为:6字节、8字节、2字节和4字节。

在接收到申请方发送的内存申请的情况下,可以对空闲内存块列表进行遍历,逐一查看得到空闲内存块列表中每个空闲内存块的总内存大小,查找总内存大小与申请内存大小相同的空闲内存块。如果查找到,则继续执行步骤S130的操作,如果没有查找到,则可以通过其他方式,如随机查找到总内存大小大于申请内存大小的空闲内存块,进行内存分配。

S130:在查找到的空闲内存块中分配内存给申请方。

遍历空闲内存块列表,如果能够查找到总内存大小与申请内存大小相同的空闲内存块,则可以在查找到的空闲内存块中分配内存给申请方。如果查找到的总内存大小与申请内存大小相同的空闲内存块有多个,则可以选择其中之一进行内存分配。

举例而言,如申请内存大小为4字节,在图2所示的空闲内存块列表中,可以查找到总内存大小为4字节的空闲内存块。如果在遍历空闲内存块列表时,遍历到第一个总内存大小为6字节的空闲内存块就进行内存分配,则进行内存分配后将产生2字节的内存碎片。而应用本申请方案,查找到总内存大小与申请内存大小相同的空闲内存块,进行内存分配,将不会带来内存碎片。

应用本申请实施例所提供的方法,在接收到申请方发送的内存申请时,遍历空闲内存块列表,查找总内存大小与申请内存大小相同的空闲内存块,在查找到的空闲内存块中分配内存给申请方,这样可以尽量避免内存碎片的产生,缓解资源紧张的问题。

在本申请的一个实施例中,在遍历空闲内存块列表之后,该方法还可以包括以下步骤:

步骤一:如果未查找到总内存大小与申请内存大小相同的空闲内存块,则根据申请内存大小,确定待分配集合,待分配集合中的每个空闲内存块的总内存大小与申请内存大小的比值大于设定比例阈值;

步骤二:在待分配集合中选择一个空闲内存块,分配内存给申请方。

为便于描述,将上述两个步骤结合起来进行说明。

在本申请实施例中,在接收到申请方发送的内存申请的情况下,遍历空闲内存块列表,遍历完成,如果未查找到总内存大小与申请内存大小相同的空闲内存块,则表明当前空闲内存块列表中不存在刚好可利用的空闲内存块。在这种情况下,可以根据申请内存大小,在空闲内存块列表中查找总内存大小与申请内存大小的比值大于设定比例阈值的空闲内存块,构成待分配集合。

可以预先设定一个比例阈值,该比例阈值大于1,如设定为1.5、2等。对于一个空闲内存块而言,其总内存大小与申请内存大小的比值越大,在该空闲内存块中分配内存给申请方后,剩余的内存大小越大,越不容易产生内存碎片。

确定出的待分配集合中可能包含多个空闲内存块,可以在待分配集合中选择一个空闲内存块,分配内存给申请方。如可以随机选择一个空闲内存块。

在本申请的一种具体实施方式中,可以在待分配集合中选择总内存大小最大的空闲内存块,分配内存给申请方。

待分配集合中的每个空闲内存块的总内存大小与申请内存大小的比值大于设定比例阈值,可以在待分配集合中选择总内存大小最大的空闲内存块,分配给申请方。

举例而言,如申请内存大小为4字节,比例阈值为1,在图3所示的空闲内存块列表中,未查找到总内存大小为4字节的空闲内存块,根据申请内存大小,确定的待分配集合包括:总内存大小为6字节的空闲内存块和总内存大小为8字节的空闲内存块。可以在待分配集合中选择总内存大小最大,即总内存大小为8字节的空闲内存块,分配内存给申请方。这样进行内存分配后剩余内存大小为4字节。如果在总内存大小为6字节的空闲内存块中进行内存分配,则进行内存分配后剩余内存大小为2字节,显然相较于本例中的前一种方案,更易产生内存碎片。

也就是说,越大的空闲内存块的可用性越高,所以,在未查找到总内存大小与申请内存大小相同的空闲内存块的情况下,可以在确定出的待分配集合中选择总内存大小最大的空闲内存块,分配内存给申请方,这样可以尽量减少内存碎片的产生。

在本申请的一个实施例中,该方法还可以包括以下步骤:

第一个步骤:获得回收内存块;

第二个步骤:根据回收内存块的地址,确定空闲内存块列表中是否存在地址连续的内存块,如果存在,则执行第三个步骤;

第三个步骤:将地址连续的内存块进行合并处理。

为便于描述,将上述三个步骤结合起来进行说明。

在系统运行过程中,会有内存申请和释放,当有释放的内存时,可以对内存进行回收处理,以再分配给其他申请方使用。

获得回收内存块后,可以根据回收内存块的地址,确定空闲内存块列表中是否存在地址连续的内存块。空闲内存块列表中的空闲内存块可以按照地址前后顺序排列,以方便查看每个空闲内存块的地址。如果空闲内存块列表中存在地址连续的内存块,则可以将地址连续的内存块进行合并处理,以使得空闲内存块列表中的空闲内存块的总内存大小尽可能大。

比如,图4中空闲内存块列表包括空闲内存块分别为:

空闲内存块1:地址为0x00000000、总内存大小为6字节、

空闲内存块2:地址为0x0000010、总内存大小为8字节、

空闲内存块3:地址为0x000001C、总内存大小为2字节、

空闲内存块4:地址为0x0000022、总内存大小为3字节。

如果回收0x0000018地址上的4字节内存,即回收内存块的地址为0x0000018,总内存大小为4字节,则根据回收内存块的地址,可以确定空闲内存块列表中存在地址连续的内存块,即空闲内存块2、回收内存块和空闲内存块3的地址是连续的。可以将这三个内存块进行合并处理,得到图5所示的空闲内存块列表,该空闲内存块列表包括空闲内存块分别为:

地址为0x00000000、总内存大小为6字节的空闲内存块;

地址为0x0000010、总内存大小为14字节的空闲内存块;

地址为0x0000022、总内存大小为3字节的空闲内存块。

将地址连续的内存块进行合并处理,相较于不合并的方式,可用性更高。如图6所示,为不合并的方式,空闲内存块列表中包括的均为总内存大小较小的空闲内存块,在进行内存分配后,很容易产生内存碎片。

当然,根据回收内存块的地址,如果确定空闲内存块列表中不存在地址连续的内存块,则可以不进行其他处理,直接按照预设规则在空闲内存块列表中记录回收内存块即可。

在本申请的一个实施例中,申请方为结构体对象,内存申请中携带结构体对象包含的每个字段的申请内存大小的信息;查找总内存大小与申请内存大小相同的空闲内存块,包括:

针对结构体对象包含的每个字段,查找总内存大小与当前字段的申请内存大小相同的空闲内存块;

相应的,将查找到的空闲内存块分配给申请方,包括:

针对结构体对象包含的每个字段,将查找到的总内存大小与当前字段的申请内存大小相同的空闲内存块的内存分配给当前字段。

在本申请实施例中,如果申请方为结构体对象,则需要考虑字节对齐要求。在相关技术中,为了方便,对于结构体对象的内存申请,会进行整体分配,这样容易导致内存占用大小增大。

比如,结构体对象如下所示:

以上结构体对象包括三个字段,占用的字节大小不同,而且都是要求字节对齐。如果整体分配内存,考虑到字节对齐的要求,其整体的申请内存大小只能以最大的字节对齐要求进行,也就是3*4=12字节,要求4字节对齐。满足该对齐要求以及申请内存大小要求的空闲内存块并不容易找到。本申请中,内存申请中携带结构体对象包含的每个字段的申请内存大小的信息,针对结构体对象包含的每个字段,可以查找总内存大小与当前字段的申请内存大小相同的空闲内存块,将查找到的总内存大小与当前字段的申请内存大小相同的空闲内存块的内存分配给当前字段。即对于每个字段单独分配内存,这样会降低对空闲内存块的要求。如上例所示需要分配三次,对第一个字段只需要1字节对齐以及分配1字节的内存大小,对第二个字段只需要2字节对齐以及分配2字节的内存大小,对于第三个字段只需要4字节对齐以及分配4字节的内存大小。这样分配出的内存大小总共有1+2+4=7字节。可以提高内存利用率,可以有效利用较小的内存碎片进行内存分配。

相应于上面的方法实施例,本申请实施例还提供了一种内存分配控制装置,下文描述的内存分配控制装置与上文描述的内存分配控制方法可相互对应参照。

参见图7所示,该装置可以包括以下模块:

内存申请接收模块710,用于接收申请方发送的内存申请,内存申请中携带申请内存大小的信息;

空闲内存块查找模块720,用于遍历空闲内存块列表,查找总内存大小与申请内存大小相同的空闲内存块;

内存分配模块730,用于在查找到的空闲内存块中分配内存给申请方。

应用本申请实施例所提供的装置,在接收到申请方发送的内存申请时,遍历空闲内存块列表,查找总内存大小与申请内存大小相同的空闲内存块,在查找到的空闲内存块中分配内存给申请方,这样可以尽量避免内存碎片的产生,缓解资源紧张的问题。

在本申请的一种具体实施方式中,内存分配模块730,还用于:

在遍历空闲内存块列表之后,如果未查找到总内存大小与申请内存大小相同的空闲内存块,则根据申请内存大小,确定待分配集合,待分配集合中的每个空闲内存块的总内存大小与申请内存大小的比值大于设定比例阈值;

在待分配集合中选择一个空闲内存块,分配内存给申请方。

在本申请的一种具体实施方式中,内存分配模块730,还用于:

在待分配集合中选择总内存大小最大的空闲内存块,分配内存给申请方。

在本申请的一种具体实施方式中,还包括回收处理模块,用于:

获得回收内存块;

根据回收内存块的地址,确定空闲内存块列表中是否存在地址连续的内存块;

如果存在,则将地址连续的内存块进行合并处理。

在本申请的一种具体实施方式中,空闲内存块列表中的空闲内存块按照地址前后顺序排列。

在本申请的一种具体实施方式中,申请方为结构体对象,内存申请中携带结构体对象包含的每个字段的申请内存大小的信息;

空闲内存块查找模块720,用于:

针对结构体对象包含的每个字段,查找总内存大小与当前字段的申请内存大小相同的空闲内存块;

相应的,内存分配模块730,用于:

针对结构体对象包含的每个字段,将查找到的总内存大小与当前字段的申请内存大小相同的空闲内存块的内存分配给当前字段。

相应于上面的方法实施例,本申请实施例还提供了一种内存分配控制设备,包括:

存储器,用于存储计算机程序;

处理器,用于执行计算机程序时实现上述内存分配控制方法的步骤。

如图8所示,为内存分配控制设备的组成结构示意图,内存分配控制设备可以包括:处理器10、存储器11、通信接口12和通信总线13。处理器10、存储器11、通信接口12均通过通信总线13完成相互间的通信。

在本申请实施例中,处理器10可以为中央处理器(Central Processing Unit,CPU)、特定应用集成电路、数字信号处理器、现场可编程门阵列或者其他可编程逻辑器件等。

处理器10可以调用存储器11中存储的程序,具体的,处理器10可以执行内存分配控制方法的实施例中的操作。

存储器11中用于存放一个或者一个以上程序,程序可以包括程序代码,程序代码包括计算机操作指令,在本申请实施例中,存储器11中至少存储有用于实现以下功能的程序:

接收申请方发送的内存申请,内存申请中携带申请内存大小的信息;

遍历空闲内存块列表,查找总内存大小与申请内存大小相同的空闲内存块;

在查找到的空闲内存块中分配内存给申请方。

在一种可能的实现方式中,存储器11可包括存储程序区和存储数据区,其中,存储程序区可存储操作系统,以及至少一个功能(比如数据通信功能、列表遍历功能)所需的应用程序等;存储数据区可存储使用过程中所创建的数据,如内存大小数据、对比结果数据等。

此外,存储器11可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件或其他易失性固态存储器件。

通信接口12可以为通信模块的接口,用于与其他设备或者系统连接。

当然,需要说明的是,图8所示的结构并不构成对本申请实施例中内存分配控制设备的限定,在实际应用中内存分配控制设备可以包括比图8所示的更多或更少的部件,或者组合某些部件。

相应于上面的方法实施例,本申请实施例还提供了一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现上述内存分配控制方法的步骤。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。

本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的技术方案及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。

相关技术
  • 一种内存分配控制方法、装置、设备及存储介质
  • 一种内存分配管理方法、装置、设备及存储介质
技术分类

06120112758847