CN112269665B - 内存的处理方法和装置、电子设备和存储介质 - Google Patents
内存的处理方法和装置、电子设备和存储介质 Download PDFInfo
- Publication number
- CN112269665B CN112269665B CN202011526583.3A CN202011526583A CN112269665B CN 112269665 B CN112269665 B CN 112269665B CN 202011526583 A CN202011526583 A CN 202011526583A CN 112269665 B CN112269665 B CN 112269665B
- Authority
- CN
- China
- Prior art keywords
- memory
- memory block
- address
- target
- block
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5022—Mechanisms to release resources
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System (AREA)
Abstract
本申请提供了一种内存的处理方法和装置、电子设备和存储介质,其中,该方法包括:获取已释放的第一内存块的第一内存地址,其中,所述第一内存块为目标内存中待储存内存地址的内存块;对所述第一内存地址进行哈希计算,得到与所述第一内存地址对应的目标哈希值;查找目标数组中与所述目标哈希值对应的目标位置,其中,所述目标内存中的已释放内存块的内存地址存储在所述目标数组中与所述已释放内存块的内存地址的哈希值对应的位置上;在所述目标位置上查找到第二内存块的内存地址的情况下,将所述第一内存块与所述第二内存块合并为第三内存块。通过本申请,解决了相关技术中的内存分配方式存在内存重复使用率低、内存资源浪费的问题。
Description
技术领域
本申请涉及数据处理领域,尤其涉及一种内存的处理方法和装置、电子设备和存储介质。
背景技术
相关技术中,在数据库事务处理的过程中,可以申请一个内存数据页(page),申请的内存大小约为16k。释放(free)的内存块,存放到freelist链表(可利用空间表),freelist链表按照释放的顺序存放,形成一个存放了很多内存块的空闲内存链表。
相邻的内存块在freelist链表中可能不会相邻,导致freelist链表中相邻的free内存形成多个内存碎片。如果有大内存块的申请,申请的内存块的大小大于freelist中的内存块的大小,那么,无法利用free的内存,只能从内存中再申请内存块,造成freelist中的内存重复使用率低,造成内存资源浪费。
因此,相关技术中的内存分配方式,存在内存重复使用率低、内存资源浪费的问题。
发明内容
本申请提供了一种内存的处理方法和装置、电子设备和存储介质,以至少解决相关技术中的内存分配方式存在内存重复使用率低、内存资源浪费的问题。
根据本申请实施例的一个方面,提供了一种内存的处理方法,包括:获取已释放的第一内存块的第一内存地址,其中,所述第一内存块为目标内存中待储存内存地址的内存块;对所述第一内存地址进行哈希计算,得到所述第一内存地址的目标哈希值;查找目标数组中与所述目标哈希值对应的目标位置,其中,所述目标内存中的已释放内存块的内存地址存储在所述目标数组中与所述已释放内存块的内存地址的哈希值对应的位置上;在所述目标位置上查找到第二内存块的内存地址的情况下,将所述第一内存块与所述第二内存块合并为第三内存块。
可选地,所述目标哈希值包括所述第一内存地址的开始地址的第一哈希值和所述第一内存地址的结束地址的第二哈希值,所述目标位置包括与所述第一哈希值对应的第一位置和与所述第二哈希值对应的第二位置;将所述第一内存块与所述第二内存块合并为所述第三内存块包括:在所述第一位置上查找到所述第二内存块的内存地址的情况下,将所述第二内存块的开始地址确定为所述第三内存块的开始地址,将所述第一内存块的结束地址确定为所述第三内存块的结束地址;在所述第二位置上查找到所述第二内存块的内存地址的情况下,将所述第一内存块的开始地址确定为所述第三内存块的开始地址,将所述第二内存块的结束地址确定为所述第三内存块的结束地址;在所述第一位置上查找到第一子内存块的内存地址、且在所述第二位置上查找到第二子内存块的内存地址的情况下,将所述第一子内存块的开始地址确定为所述第三内存块的开始地址,将所述第二子内存块的结束地址确定为所述第三内存块的结束地址,其中,所述第二内存块包括所述第一子内存块和所述第二子内存块。
可选地,在将所述第一内存块与所述第二内存块合并为所述第三内存块之后,所述方法还包括:将所述第三内存块的内存地址写入到所述目标数组中的第三位置和第四位置,其中,所述第三位置为所述目标数组中与所述第三内存块的开始地址的哈希值对应的位置,所述第四位置为所述目标数组中与所述第三内存块的结束地址的哈希值对应的位置上。
可选地,在将所述第一内存块与所述第二内存块合并为所述第三内存块之后,所述方法还包括:将所述目标数组中第五位置和第六位置上存储的所述第二内存块的内存地址移除,其中,所述第五位置为所述目标数组中与所述第二内存块的开始地址的哈希值对应的位置,所述第六位置为所述目标数组中与所述第二内存块的结束地址的哈希值对应的位置。
可选地,所述方法还包括:获取目标事务的内存申请指令,其中,所述内存申请指令用于申请目标大小的内存块;响应所述内存申请指令,按照所述目标大小查找所述目标数组;在查找到内存块大小大于或者等于所述目标大小的第四内存块的情况下,为所述目标事务分配第五内存块,其中,所述第五内存块为所述第四内存块中,内存大小为所述目标大小的部分。
可选地,按照所述目标大小查找所述目标数组包括:依次查找所述目标数组中存储的各个内存地址,确定是否存在内存块大小为所述目标大小的内存块;在未查找到内存块大小为所述目标大小的内存块的情况下,依次查找所述目标数组中存储的各个内存地址,确定是否存在内存块大小大于所述目标大小的内存块。
可选地,在为所述目标事务分配第五内存块之后,所述方法还包括:将所述第四内存块的内存地址从所述目标数组中移除;在所述第四内存块的大小大于所述目标大小的情况下,将第六内存块的内存地址写入到所述目标数组中与所述第六内存块的内存地址的哈希值对应的位置上,其中,所述第六内存块为所述第四内存块中除了所述第五内存块以外的内存块。
根据本申请实施例的另一个方面,提供了一种内存的处理装置,包括:第一获取单元,用于获取已释放的第一内存块的第一内存地址,其中,所述第一内存块为目标内存中待储存内存地址的内存块;计算单元,用于对所述第一内存地址进行哈希计算,得到与所述第一内存地址对应的目标哈希值;第一查找单元,用于查找目标数组中与所述目标哈希值对应的目标位置,其中,所述目标内存中的已释放内存块的内存地址存储在所述目标数组中与所述已释放内存块的内存地址的哈希值对应的位置上;合并单元,用于在所述目标位置上查找到第二内存块的内存地址的情况下,将所述第一内存块与所述第二内存块合并为第三内存块。
可选地,所述目标哈希值包括所述第一内存地址的开始地址的第一哈希值和所述第一内存地址的结束地址的第二哈希值,所述目标位置包括与所述第一哈希值对应的第一位置和与所述第二哈希值对应的第二位置;所述合并单元包括:第一确定模块,用于在所述第一位置上查找到所述第二内存块的内存地址的情况下,将所述第二内存块的开始地址确定为所述第三内存块的开始地址,将所述第一内存块的结束地址确定为所述第三内存块的结束地址;第二确定模块,在在所述第二位置上查找到所述第二内存块的内存地址的情况下,将所述第一内存块的开始地址确定为所述第三内存块的开始地址,将所述第二内存块的结束地址确定为所述第三内存块的结束地址;第三确定模块,在所述第一位置上查找到第一子内存块的内存地址、且在所述第二位置上查找到第二子内存块的内存地址的情况下,将所述第一子内存块的开始地址确定为所述第三内存块的开始地址,将所述第二子内存块的结束地址确定为所述第三内存块的结束地址,其中,所述第二内存块包括所述第一子内存块和所述第二子内存块。
可选地,所述装置还包括:第一写入单元,用于将所述第三内存块的内存地址写入到所述目标数组中的第三位置和第四位置,其中,所述第三位置为所述目标数组中与所述第三内存块的开始地址的哈希值对应的位置,所述第四位置为所述目标数组中与所述第三内存块的结束地址的哈希值对应的位置上。
可选地,所述装置还包括:第一移除单元,用于将所述目标数组中第五位置和第六位置上存储的所述第二内存块的内存地址移除,其中,所述第五位置为所述目标数组中与所述第二内存块的开始地址的哈希值对应的位置,所述第六位置为所述目标数组中与所述第二内存块的结束地址的哈希值对应的位置。
可选地,所述装置还包括:第二获取单元,用于获取目标事务的内存申请指令,其中,所述内存申请指令用于申请目标大小的内存块;第二查找单元,用于响应所述内存申请指令,按照所述目标大小查找所述目标数组;分配单元,用于在查找到内存块大小大于或者等于所述目标大小的第四内存块的情况下,为所述目标事务分配第五内存块,其中,所述第五内存块为所述第四内存块中,内存大小为所述目标大小的部分。
可选地,所述第二查找单元包括:第一查找模块,用于依次查找所述目标数组中存储的各个内存地址,确定是否存在内存块大小为所述目标大小的内存块;第二查找模块,用于在未查找到内存块大小为所述目标大小的内存块的情况下,依次查找所述目标数组中存储的各个内存地址,确定是否存在内存块大小大于所述目标大小的内存块。
可选地,所述装置还包括:第二移除单元,用于在为所述目标事务分配所述第五内存块之后,将所述第四内存块的内存地址从所述目标数组中移除;第二写入单元,用于在所述第四内存块的大小大于所述目标大小的情况下,将第六内存块的内存地址写入到所述目标数组中与所述第六内存块的内存地址的哈希值对应的位置上,其中,所述第六内存块为所述第四内存块中除了所述第五内存块以外的内存块。
根据本申请实施例的又一个方面,还提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器、通信接口和存储器通过通信总线完成相互间的通信;其中,存储器,用于存储计算机程序;处理器,用于通过运行所述存储器上所存储的所述计算机程序来执行上述任一实施例中的方法步骤。
根据本申请实施例的又一个方面,还提供了一种计算机可读的存储介质,该存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一实施例中的方法步骤。
在本申请实施例中,采用按照内存地址的哈希值在数组中存储已释放内存块的内存地址的方式,通过获取已释放的第一内存块的第一内存地址,其中,第一内存块为目标内存中待储存内存地址的内存块;对第一内存地址进行哈希计算,得到与第一内存地址对应的目标哈希值;查找目标数组中与目标哈希值对应的目标位置,其中,目标内存中的已释放内存块的内存地址存储在目标数组中与已释放内存块的内存地址的哈希值对应的位置上;在目标位置上查找到第二内存块的内存地址的情况下,将第一内存块与第二内存块合并为第三内存块,由于把freelist由链表修改为数组,将已释放内存块的内存地址存储在数组中与其内存地址的哈希值对应的位置上,在进行内存块释放时,按照内存地址的哈希值查找数据,可以方便快捷地确定出已释放内存块中是否存在与此次释放的内存块相邻的内存块(通过hash值查找,可以实现复杂度为O(1)的性能查找),从而可以实现快速合并相邻内存块的目的,方便后续内存申请时freelist中的内存块被重复利用,达到了减少内存资源的浪费、提高内存重复使用率的技术效果,进而解决了相关技术中的内存分配方式存在内存重复使用率低、内存资源浪费的问题。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是根据本发明实施例的一种可选的内存的处理方法的硬件环境的示意图;
图2是根据本申请实施例的一种可选的内存的处理方法的流程示意图;
图3是根据本申请实施例的另一种可选的内存的处理方法的流程示意图;
图4是根据本申请实施例的一种可选的内存的处理装置的结构框图;
图5是根据本申请实施例的一种可选的电子设备的结构框图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
根据本申请实施例的一个方面,提供了一种内存的处理方法。可选地,在本实施例中,上述内存的处理方法可以应用于如图1所示的由终端102和服务器104(数据库的本地主机)所构成的硬件环境中。如图1所示,服务器104通过网络与终端102进行连接,可用于为终端或终端上安装的客户端提供服务(如游戏服务、应用服务等),可在服务器上或独立于服务器设置数据库,用于为服务器104提供数据存储服务。
上述网络104包括但不限于以下至少之一:有线网络,无线网络,该有线网络可以包括但不限于以下至少之一:广域网、城域网或局域网,该无线网络可以包括但不限于以下至少之一:蓝牙、WIFI(Wireless Fidelity,无线保真)及其他实现无线通信的网络。上述终端102可以是计算数据的终端,如移动终端(例如手机、平板电脑)、笔记本电脑、PC机等终端上。上述服务器可以包括但不限于任何可以进行计算的硬件设备。
本申请实施例的内存的处理方法可以由服务器104来执行,也可以由终端102来执行,还可以是由服务器104和终端102共同执行。其中,终端102执行本申请实施例的内存的处理方法也可以是由安装在其上的客户端来执行。
以由服务器104来执行本实施例中的内存的处理方法为例,图2是根据本申请实施例的一种可选的内存的处理方法的流程示意图,如图2所示,该方法的流程可以包括以下步骤:
步骤S202,获取已释放的第一内存块的第一内存地址,其中,第一内存块为目标内存中待储存内存地址的内存块。
本实施例中的内存的处理方法可以应用于数据库中的内存管理的场景。对于其他需要为内存申请分配内存块的场景,本实施例中的内存的处理方法同样适用。
内存申请所申请的内存块的内存地址可以通过开始地址和结束地址进行表示,即,通过内存块坐标[startaddr,endaddr)进行表示,startaddr为开始地址(开始内存地址),endaddr为结束地址(结束内存地址)。当有内存块释放时,服务器可以将其内存地址进行存储。例如,当前释放的内存块为第一内存块,服务器可以获取第一内存块的第一内存地址,第一内存地址可以包括:第一内存块的开始地址和第一内存块的结束地址。
例如,内存申请的内存块坐标[开始内存地址,结束地址)如下:[0,50),[50,70),[70,80),[80,100),[100,150),[150,350),[350,410),[410,450),[450,460)。部分内存已经被释放,释放的内存位置及顺序为:[70,80)->[100,150)->[450,460)->[80,100)->[0,50)。当前释放的内存块为:[80,100),则当前已释放的内存块包括:[70,80),[100,150),[450,460)。
步骤S204,对第一内存地址进行哈希计算,得到与第一内存地址对应的目标哈希值。
为了提高数组的查找效率,同时减少数组所占用的存储空间,可以对内存地址进行映射,不同的内存地址可以映射为不同的标识(例如,数组的下标),不同的标识可以对应于目标数组的不同位置,也就是,将内存块的内存地址存储在以其内存地址所映射为的标识作为下标的位置上。
可选地,在本实施例中,可以通过hash(哈希)算法计算出内存地址的哈希值。所使用的哈希函数可以根据需要进行配置,例如,可以是:内存地址的值以内存申请时所分配的最小内存块的大小求余,得到的值即为该内存地址的hash值。
在得到第一内存块的第一内存地址后,服务器可以对第一内存地址进行哈希计算,得到与第一内存地址对应的目标哈希值,其中,目标哈希值包括对第一内存地址的开始地址进行哈希计算得到的第一哈希值和对第一内存地址的结束地址进行哈希计算得到的第二哈希值。
例如,当释放[80,100)时,可以分别计算80和100的哈希值,得到对应的哈希值为3和10。
需要说明的是,确定内存地址所映射为的标识的方式可以有多种,哈希计算只是其中的一种方式,对于其他可以将不同的内存地址映射为不同标识的方式,也可用于本实施例。
此外,基于选取的映射方式以及内存地址的表征方式,不同的内存地址所映射为的标识(如,哈希值)存在重复的可能。此时,可以采用其他标识来标识不同的内存地址,本实施例中对此不作限定。
还需要说明的是,不同的内存地址也可以映射为相同的标识,那么,数组中的一个位置上可能保存有一个或多个内存块的内存地址。可以通过存储规则、存储方式或者其他方式区分同一位置上存储的多个内存地址,数组中的内存地址的控制方式与其他实施例均可兼容。
步骤S206,查找目标数组中与目标哈希值对应的目标位置,其中,目标内存中的已释放内存块的内存地址存储在目标数组中与已释放内存块的内存地址的哈希值对应的位置上。
可选地,在本实施例中,可以把freelist由链表修改为数组,通过数组保存目标内存中的已释放内存块的内存地址。目标内存中的已释放内存块的内存地址存储在目标数组中与已释放内存块的内存地址的哈希值对应的位置上。数组中的每个位置具有其位置标识,例如,下标,可以由哈希值确定与其对应的位置标识,进而由位置标识确定出查找的位置。例如,已释放内存块的内存地址存储在目标数组中以其内存地址的哈希值为下标的位置上。
需要说明的是,除了以哈希值作为下标进行内存地址存储的方式以外,也可以采用其他方式确定内存地址的存储位置,例如,以内存地址的哈希值加上一个固定值所得到的值作为下标,确定内存地址的存储位置,或者,通过其他哈希值与下标的映射方式确定内存地址的存储位置,本实施例中对此不作限定。
由于内存地址包括开始地址和结束地址,因此,一个内存块的内存地址存储数组的两个位置上,分别为:与其开始地址的哈希值对应的一个位置,与其结束地址的哈希值对应的另一个位置。
例如,创建的存放free内存块的数组可以如表1所示。
表1
下标 | ||||||||||||||||
内存块 |
在释放[80,100)前,目标数组中保存的已释放内存块的内存地址为:[70,80),[100,150),[450,460)。
数组中先后存储了[70,80)、[100,150)和[450,460)三块内存块的内存地址。对于[70,80),70对应的hash值为0,存储在数组中下标为0的位置,80对应的hash值为3,存储在数组中下标为3的位置。对于[100,150),100对应的hash值为10,存储在数组中下标为10的位置,150对应的hash值为15,存储在数组中下标为15的位置。类似地,450和460对应的hash值是6和12,因此,[450,460)存储在数组中下标为6和12的两个位置,得到表2所示的数组。
表2
下标 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
内存块 | [70,80) | [70,80) | [450,460) | [100,150) | [450,460) | [100,150) |
在得到目标哈希值之后,服务器可以查找以哈希值为下标的目标位置,确定该位置上是否以存储有其他内存块的内存地址。目标哈希值包括第一哈希值和第二哈希值,对应地,目标位置包括以第一哈希值为下标的第一位置、以及以第二哈希值为下标的第二位置。
例如,当释放[80,100)时,可以查找数组中下标为3的位置和下标为10的位置。
步骤S208,在目标位置上查找到第二内存块的内存地址的情况下,将第一内存块与第二内存块合并为第三内存块。
如果在目标位置上查找到第二内存块的内存地址,按照内存块的存储方式,可以确定第二内存块的内存地址的哈希值与第一内存块的内存地址的哈希值相同。由于一个内存地址映射为一个哈希值,那么,服务器可以确定出第二内存块为与第一内存块相邻的内存块,进而可以确定第一内存块和第二内存块可以合并为一个大的内存块。合并后的内存块可以在之后有内存申请时进行内存复用。
服务器可以将第一内存块与第二内存块合并为第三内存块。对于已合并的内存块,服务器可以采用多种方式进行处理,例如,将其移除,又例如,将其标记为不可用、或者已失效等等。本实施例中对此不作限定。
可选地,如果目标数组的一个位置上允许存储多个内存块的内存地址,则可以按照内存地址进一步判断第一内存块与第二内存块之间是否相邻。服务器可以在目标位置上查找到第二内存块的内存地址、并且按照内存地址确定出第一内存块与第二内存块相邻的情况下,将第一内存块与第二内存块合并为第三内存块。
例如,当前释放的内存块为[80,100),如果采用链表存储内存块的内存地址,[80,100)因释放顺序的原因无法与[70,80)和[100,150)两块内存合并形成一个大的内存块。而通过数组的方式保存内存地址,服务器可以按照其内存地址[80,100)的哈希值查找目标数组;如果查找到与[80,100)相邻的两个内存地址[70,80)和[100,150),可以将三者合并为一个内存块[70,150)。
可选地,如果在目标位置上未查找到任何内存块的内存地址,服务器可以确定没有与第一内存块相邻的已释放内存块,服务器可以将第一内存块的内存地址写入到目标数组的目标位置上,即,第一位置和第二位置上。
在本实施例中,数组查找使用的是内存地址的hash值,按照hash值(例如,将哈希值作为数组的下标)查找,通过hash计算可以实现复杂度为O(1)的性能查找。如果合并过程中是顺序查找,则查找的复杂度为O(N),因此,通过哈希计算可以实现数组的快速查找。
通过上述步骤S202至步骤S208,获取已释放的第一内存块的第一内存地址,其中,第一内存块为目标内存中待储存内存地址的内存块;对第一内存地址进行哈希计算,得到与第一内存地址对应的目标哈希值;查找目标数组中与目标哈希值对应的目标位置,其中,目标内存中的已释放内存块的内存地址存储在目标数组中与已释放内存块的内存地址的哈希值对应的位置上;在目标位置上查找到第二内存块的内存地址的情况下,将第一内存块与第二内存块合并为第三内存块,解决了相关技术中的内存分配方式存在内存重复使用率低、内存资源浪费的问题,减少了内存资源的浪费,提高了内存重复使用率。
可选地,在本实施例中,目标哈希值包括第一内存地址的开始地址的第一哈希值和第一内存地址的结束地址的第二哈希值,目标位置包括与第一哈希值对应的第一位置和与第二哈希值对应的第二位置。由于内存块的释放过程具有一定的随机性,刚释放的内存块与已释放内存块的位置关系可以有多种:均不相邻,与一个内存块相邻,与两个内存块相邻。不同的位置关系,可以采用不同的处理方式。
作为一种可选的实施方式,将第一内存块与第二内存块合并为第三内存块包括:
S11,在第一位置上查找到第二内存块的内存地址的情况下,将第二内存块的开始地址确定为第三内存块的开始地址,将第一内存块的结束地址确定为第三内存块的结束地址。
如果仅在目标数组的第一位置上查找到第二内存块的内存地址,服务器可以确定第一内存块与第二内存块相邻,且第一内存块是位于第二内存块之后的内存块。服务器可以将第二内存块的开始地址确定为第三内存块的开始地址,将第一内存块的结束地址确定为第三内存块的结束地址。
此外,服务器还可以将第一位置上存储的第二内存块的内存地址删除,将目标数组中与第二内存块的开始地址的哈希值对应的位置上存储的内存地址更新为第三内存块的内存地址,并将第三内存块的内存地址写入到目标数组中与第三内存块的结束地址的哈希值对应的位置上。
作为另一种可选的实施方式,将第一内存块与第二内存块合并为第三内存块包括:
S12,在第二位置上查找到第二内存块的内存地址的情况下,将第一内存块的开始地址确定为第三内存块的开始地址,将第二内存块的结束地址确定为第三内存块的结束地址。
如果仅在目标数组的第二位置上查找到第二内存块的内存地址,服务器可以确定第一内存块与第二内存块相邻,且第一内存块是位于第二内存块之前的内存块。服务器可以将第一内存块的开始地址确定为第三内存块的开始地址,将第二内存块的结束地址确定为第三内存块的结束地址。
此外,服务器还可以将第二位置上所存储第二内存块的内存地址删除,将目标数组中与第二内存块的结束地址的哈希值对应的位置上存储的内存地址更新为第三内存块的内存地址,并将第三内存块的内存地址存写入到目标数组中与第三内存块的开始地址的哈希值对应的位置上。
作为又一种可选的实施方式,将第一内存块与第二内存块合并为第三内存块包括:
S13,在第一位置上查找到第一子内存块的内存地址、且在第二位置上查找到第二子内存块的内存地址的情况下,将第一子内存块的开始地址确定为第三内存块的开始地址,将第二子内存块的结束地址确定为第三内存块的结束地址,其中,第二内存块包括第一子内存块和第二子内存块。
如果在目标数组的第一位置上和第二位置上均查找到内存地址,即,第一子内存块的内存地址和第二子内存块的内存地址,服务器可以确定第一内存块与第一子内存块和第二子内存块均相邻,且第一内存块是位于第一子内存块之后、且位于第二子内存块之前的内存块。服务器可以将第一子内存块的开始地址确定为第三内存块的开始地址,将第二子内存块的结束地址确定为第三内存块的结束地址。
此外,服务器还可以将第一位置上存储的第一子内存块的内存地址和第二位置上存储的第二子内存块的内存地址删除,将目标数组中与第一子内存块的开始地址的哈希值对应的位置上存储的内存地址以及与第二子内存块的结束地址的哈希值对应的位置上存储的内存地址均更新为第三内存块的内存地址。
例如,当释放[80,100)时,通过80的hash值查找如图2所示的下标3的位置。根据表2,可以查找到相邻的内存块70,80),将[80,100)与[70,80)合并,形成一个新的、大的内存块[70,100),并删除数组中存储的内存块[70,80)(内存块的地址),如表3所示。
表3
下标 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
内存块 | [450,460) | [100,150) | [450,460) | [100,150) |
新合并的内存块再次查找,通过100的hash值查找到下标10的位置。根据表3,可以查找到相邻的内存块[100,150),将[70,100)与[100,150)合并,形成一个新的、大的内存块[70,150),并删除数组存储的内存块[100,150),如表4所示。
表4
下标 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
内存块 | [450,460) | [450,460) |
由于新释放的内存块一般最多与两个已释放的内存块相连,在新释放的内存块的开始地址的哈希值对应的位置以及结束地址的哈希值对应的位置均已查找完毕之后,可以插入新的内存块[70,150)。70的hash值为0,[70,150)可以存储在下标为0的位置,150的hash值为15,[70,150)可以存储在下标为15的位置,如表5所示。
表5
下标 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
内存块 | [70,150) | [450,460) | [450,460) | [70,150) |
通过本实施例,根据新释放的内存块与已释放内存块的位置关系,采用不同的处理方式在数组中写入内存地址,可以提高内存地址写入的准确性,同时节省数组的内存占用。
作为一种可选的实施例,在将第一内存块与第二内存块合并为第三内存块之后,上述方法还包括:
S21,将第三内存块的内存地址写入到目标数组中的第三位置和第四位置,其中,第三位置为目标数组中与第三内存块的开始地址的哈希值对应的位置,第四位置为目标数组中与第三内存块的结束地址的哈希值对应的位置上。
在确定出合并的第三内存块的内存地址之后,服务器可以将第三内存块的内存地址写入到目标数组中的两个位置上,分别为:与第三内存块的开始地址的哈希值对应的位置(即,第三位置),与第三内存块的结束地址的哈希值对应的位置(即,第四位置),以方便后续释放内存块时确定相邻的内存块。
通过本实施例,通过将合并后的内存地址写入到数组中的两个位置,可以方便内存地址查找,保证内存块查找的准确性。
作为一种可选的实施例,在将第一内存块与第二内存块合并为第三内存块之后,上述方法还包括:
S31,将目标数组中第五位置和第六位置上存储的第二内存块的内存地址移除,其中,第五位置为目标数组中与第二内存块的开始地址的哈希值对应的位置,第六位置为目标数组中与第二内存块的结束地址的哈希值对应的位置。
第二内存块的内存地址存储在目标数组的以下两个位置上:与所述第二内存块的开始地址的哈希值对应的位置(即,第五位置),与第二内存块的结束地址的哈希值对应的位置(即,第六位置)。
在查找到第二内存块之后,无论是何种相邻方式,服务器可以先将第二内存块的内存地址从目标数组中移除,即,移除目标数组的第五位置和第六位置上所存储的第二内存块的内存地址。
在移除第二内存块的内存地址之后,服务器可以再确定第三内存块的内存地址的写入位置,并将第三内存块的内存地址写入到目标数组中。
通过本实施例,通过先移除可合并的内存块的内存地址,再写入合并后的内存块的内存地址,可以保证内存地址写入的准确性,避免数据读写错误。
作为一种可选的实施例,上述方法还包括:
S41,获取目标事务的内存申请指令,其中,内存申请指令用于申请目标大小的内存块;
S42,响应内存申请指令,按照目标大小查找目标数组;
S43,在查找到内存块大小大于或者等于目标大小的第四内存块的情况下,为目标事务分配第五内存块,其中,第五内存块为第四内存块中,内存大小为目标大小的部分。
如果有新的内存申请指令(服务器的处理器或者其他部件获取到该内存申请),该内存申请指令可以是与目标事务有关的指令,用于申请目标大小(即,尺寸,容量大小)的内存块,服务器可以响应内存申请指令,按照目标大小查找目标数组,确定freelist中是否有满足该内存申请的内存块。
如果查找到内存块大小大于或者等于目标大小的第四内存块,服务器可以为该目标事务分配第五内存块,第五内存块是第四内存块中内存大小为目标大小的部分。如果第四内存块的大小为目标大小,则可以直接为目标事务分配第四内存块。如果第四内存块的大小大于目标大小,则可以为目标事务分配第四内存块中目标大小的部分。
如果没有查找到内存块大小大于或者等于目标大小的内存块,可以从内存中申请内存,申请过程可以参考相关技术,在此不做赘述。
通过本实施例,在有内存申请时通过查找数组确定freelist中是否有满足该内存申请的内存块,可以保证freelist中的内存块优先被使用,从而提高内存的重复使用率,同时减少内存碎片的数量,避免内存浪费。
作为一种可选的实施例,按照目标大小查找目标数组包括:
S51,依次查找目标数组中存储的各个内存地址,确定是否存在内存块大小为目标大小的内存块;
S52,在未查找到内存块大小为目标大小的内存块的情况下,依次查找目标数组中存储的各个内存地址,确定是否存在内存块大小大于目标大小的内存块。
这里需要说明的是,目标数组中存储的是内存块的内存地址,可以根据内存地址计算内存大小,例如,内存地址为FF8E0000-FF8EFFFF,其中,FF8E0000为开始地址,FF8EFFFF为结束地址,则内存大小为:FF8EFFFF-FF8E0000=FFFF,等于65535,也就是64K。
还需要说明的是,内存块的内存大小也可以预先计算并存储在数组中,例如,目标数组中的一个位置上可以存储内存地址和内存大小,又例如,目标数组的下标为偶数的位置上存储内存地址,与偶数位置相邻的下标为奇数的位置上存储内存大小,又例如,可以使用另一个数据存储内存大小,与目标数组相同的下标位置上存储同一内存块的内存大小等等,内存块大小的确定方式可以根据需要进行配置,本实施例中对此不作限定。
在查找目标数组时,可以按照先查找目标大小的内存块,再查找大于目标大小的内存块的方式进行查找,以保证内存碎片的合理利用。
服务器可以依次查找目标数组中存储的各个内存地址,确定是否存在内存块大小为目标大小的内存块。如果查找到内存块大小为目标大小的内存块(第四内存块),可以直接将其直接分配给目标事务。
如果未查找到内存块大小为目标大小的内存块,服务器可以依次查找目标数组中存储的各个内存地址,确定是否存在内存块大小大于目标大小的内存块。如果查找到内存块大小大于目标大小的内存块,服务器可以选取该内存块中目标大小的部分,并将其分配给目标事务。
第五内存块的选取方式可以是:以目标内存块的开始地址为开始地址,计算出目标大小的内存块的结束地址,将目标内存块的开始地址到计算出的结束地址的部分,确定为第五内存块;也可以是以目标内存块的结束地址为结束地址,计算出目标大小的内存块的开始地址,将计算出的开始地址到目标内存块的结束地址的部分,确定为第五内存块,还可以是其他选取方式,本实施例中对此不作限定。
通过本实施例,通过优先查找目标大小的内存块再查找大于目标大小的内存块,可以减少内存碎片的数量,同时减少数组对存储资源的占用。
作为一种可选的实施例,在为目标事务分配第五内存块之后,上述方法还包括:
S61,将第四内存块的内存地址从目标数组中移除;
S62,在第四内存块的大小大于目标大小的情况下,将第六内存块的内存地址写入到目标数组中与第六内存块的内存地址的哈希值对应的位置上,其中,第六内存块为第四内存块中除了第五内存块以外的内存块。
在为目标事务分配第四内存块中的目标大小的内存块之后,服务器可以将第四内存块的内存地址从目标数组中移除。如果第四内存块的大小大于目标大小,则分配的内存块(第五内存块)为第四内存块的部分,对于剩余的内存块(第六内存块),服务器可以将其内存地址保存到目标数组中与其内存地址的哈希值对应的位置上。
通过本实施例,通过移除查找到的内存块的内存地址并添加剩余内存块的内存地址,可以保证内存地址存储的准确性。
下面结合可选示例对本申请实施例中的内存的处理方法进行解释说明。在本示例中,按照Hash值存放已释放内存块的startaddr(开始地址)与endaddr(结束地址),在freelist中不排序的情况下,实现free的内存块合并,实现大内存申请的复用,节约内存,降低内存碎片。
在本示例中,通过hash计算把内存块的startaddr和endaddr(内存地址)存入的数组中:startaddr通过hash计算,作为数组的下标,存放的内容为startaddr和endaddr;endaddr通过hash计算,作为数组的下标,存放的内容为startaddr和endaddr。
当有free的内存,可以把startaddr与endaddr通过hash 计算得到哈希值之后到数组中查找,如果没有找到,则表示不存在相邻的内存,直接把startaddr与endaddr插入到数组中。
可选地,如图3所示,本可选示例中的内存的处理方法的流程可以包括以下步骤:
步骤S302,通过startaddr的hash值查找数组,如果找到某个内存块的endaddr,则为相邻的内存,合并两块内存,形成新的内存。
步骤S304,通过新内存块的endaddr继续查找,如果找到,则合并内存块。
步骤S306,再次查找,如果无法找到,原来的内存块标记删除掉,把新合并的内存块插入到数组中。
其中,如果内存块的内存地址存储时均执行了上述判定过程,则与一个新释放的内存块相邻的内存块的数量最多为两个,那么,步骤S306可以是可选步骤。
通过本示例,实现了快速查找内存块及合并内存块,降低了内存的碎片的数量。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM(Read-Only Memory,只读存储器)/RAM(Random Access Memory,随机存取存储器)、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本申请各个实施例所述的方法。
根据本申请实施例的另一个方面,还提供了一种用于实施上述内存的处理方法的内存的处理装置。图4是根据本申请实施例的一种可选的内存的处理装置的结构框图,如图4所示,该装置可以包括:
第一获取单元402,用于获取已释放的第一内存块的第一内存地址,其中,第一内存块为目标内存中待储存内存地址的内存块;
计算单元404,与第一获取单元402相连,用于对第一内存地址进行哈希计算,得到与第一内存地址对应的目标哈希值;
第一查找单元406,与计算单元404相连,用于查找目标数组中与目标哈希值对应的目标位置,其中,目标内存中的已释放内存块的内存地址存储在目标数组中与已释放内存块的内存地址的哈希值对应的位置上;
合并单元408,与第一查找单元406相连,用于在目标位置上查找到第二内存块的内存地址的情况下,将第一内存块与第二内存块合并为第三内存块。
需要说明的是,该实施例中的第一获取单元402可以用于执行上述步骤S202,该实施例中的计算单元404可以用于执行上述步骤S204,该实施例中的第一查找单元406可以用于执行上述步骤S206,该实施例中的合并单元408可以用于执行上述步骤S208。
通过上述模块,获取已释放的第一内存块的第一内存地址,其中,第一内存块为目标内存中待储存内存地址的内存块;对第一内存地址进行哈希计算,得到与第一内存地址对应的目标哈希值;查找目标数组中与目标哈希值对应的目标位置,其中,目标内存中的已释放内存块的内存地址存储在目标数组中与已释放内存块的内存地址的哈希值对应的位置上;在目标位置上查找到第二内存块的内存地址的情况下,将第一内存块与第二内存块合并为第三内存块,解决了相关技术中的内存分配方式存在内存重复使用率低、内存资源浪费的问题,减少了内存资源的浪费,提高了内存重复使用率。
可选地,目标哈希值包括第一内存地址的开始地址的第一哈希值和第一内存地址的结束地址的第二哈希值,目标位置包括与第一哈希值对应的第一位置和与第二哈希值对应的第二位置。
作为一种可选的实施例,合并单元408包括:
第一确定模块,用于在第一位置上查找到第二内存块的内存地址的情况下,将第二内存块的开始地址确定为第三内存块的开始地址,将第一内存块的结束地址确定为第三内存块的结束地址;
第二确定模块,在在第二位置上查找到第二内存块的内存地址的情况下,将第一内存块的开始地址确定为第三内存块的开始地址,将第二内存块的结束地址确定为第三内存块的结束地址;
第三确定模块,在第一位置上查找到第一子内存块的内存地址、且在第二位置上查找到第二子内存块的内存地址的情况下,将第一子内存块的开始地址确定为第三内存块的开始地址,将第二子内存块的结束地址确定为第三内存块的结束地址,其中,第二内存块包括第一子内存块和第二子内存块。
作为一种可选的实施例,上述装置还包括:
第一写入单元,用于将第三内存块的内存地址写入到目标数组中的第三位置和第四位置,其中,第三位置为目标数组中与第三内存块的开始地址的哈希值对应的位置,第四位置为目标数组中与第三内存块的结束地址的哈希值对应的位置上。
作为一种可选的实施例,上述装置还包括:
第一移除单元,用于将目标数组中第五位置和第六位置上存储的第二内存块的内存地址移除,其中,第五位置为目标数组中与第二内存块的开始地址的哈希值对应的位置,第六位置为目标数组中与第二内存块的结束地址的哈希值对应的位置。
作为一种可选的实施例,上述装置还包括:
第二获取单元,用于获取目标事务的内存申请指令,其中,内存申请指令用于申请目标大小的内存块;
第二查找单元,用于响应内存申请指令,按照目标大小查找目标数组;
分配单元,用于在查找到内存块大小大于或者等于目标大小的第四内存块的情况下,为目标事务分配第五内存块,其中,第五内存块为第四内存块中,内存大小为目标大小的部分。
作为一种可选的实施例,第二查找单元包括:
第一查找模块,用于依次查找目标数组中存储的各个内存地址,确定是否存在内存块大小为目标大小的内存块;
第二查找模块,用于在未查找到内存块大小为目标大小的内存块的情况下,依次查找目标数组中存储的各个内存地址,确定是否存在内存块大小大于目标大小的内存块。
作为一种可选的实施例,上述装置还包括:
第二移除单元,用于在在为目标事务分配第五内存块之后之后,将第四内存块的内存地址从目标数组中移除;
第二写入单元,用于在第四内存块的大小大于目标大小的情况下,将第六内存块的内存地址写入到目标数组中与第六内存块的内存地址的哈希值对应的位置上,其中,第六内存块为第四内存块中除了第五内存块以外的内存块。
此处需要说明的是,上述模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在如图1所示的硬件环境中,可以通过软件实现,也可以通过硬件实现,其中,硬件环境包括网络环境。
根据本申请实施例的又一个方面,还提供了一种用于实施上述内存的处理方法的电子设备,该电子设备可以是服务器、终端、或者其组合。
图5是根据本申请实施例的一种可选的电子设备的结构框图,如图5所示,包括处理器502、通信接口504、存储器506和通信总线508,其中,处理器502、通信接口504和存储器506通过通信总线508完成相互间的通信,其中,
存储器506,用于存储计算机程序;
处理器502,用于执行存储器506上所存放的计算机程序时,实现如下步骤:
S1,获取已释放的第一内存块的第一内存地址,其中,第一内存块为目标内存中待储存内存地址的内存块;
S2,对第一内存地址进行哈希计算,得到与第一内存地址对应的目标哈希值;
S3,查找目标数组中与目标哈希值对应的目标位置,其中,目标内存中的已释放内存块的内存地址存储在目标数组中与已释放内存块的内存地址的哈希值对应的位置上;
S4,在目标位置上查找到第二内存块的内存地址的情况下,将第一内存块与第二内存块合并为第三内存块。
可选地,在本实施例中,上述的通信总线可以是PCI (Peripheral ComponentInterconnect,外设部件互连标准)总线、或EISA (Extended Industry StandardArchitecture,扩展工业标准结构)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图5中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口用于上述电子设备与其他设备之间的通信。
存储器可以包括RAM,也可以包括非易失性存储器(non-volatile memory),例如,至少一个磁盘存储器。可选地,存储器还可以是至少一个位于远离前述处理器的存储装置。
作为一种示例,上述存储器506中可以但不限于包括上述内存的处理装置中的第一获取单元402、计算单元404、第一查找单元406以及合并单元408。此外,还可以包括但不限于上述内存的处理装置中的其他模块单元,本示例中不再赘述。
上述处理器可以是通用处理器,可以包含但不限于:CPU (Central ProcessingUnit,中央处理器)、NP(Network Processor,网络处理器)等;还可以是DSP (DigitalSignal Processing,数字信号处理器)、ASIC (Application Specific IntegratedCircuit,专用集成电路)、FPGA (Field-Programmable Gate Array,现场可编程门阵列)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
可选地,本实施例中的具体示例可以参考上述实施例中所描述的示例,本实施例在此不再赘述。
本领域普通技术人员可以理解,图5所示的结构仅为示意,实施上述内存的处理方法的设备可以是终端设备,该终端设备可以是智能手机(如Android手机、iOS手机等)、平板电脑、掌上电脑以及移动互联网设备(Mobile Internet Devices,MID)、PAD等终端设备。图5其并不对上述电子设备的结构造成限定。例如,电子设备还可包括比图5中所示更多或者更少的组件(如网络接口、显示装置等),或者具有与图5所示的不同的配置。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令终端设备相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:闪存盘、ROM、RAM、磁盘或光盘等。
根据本申请实施例的又一个方面,还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以用于执行本申请实施例中上述任一项内存的处理方法的程序代码。
可选地,在本实施例中,上述存储介质可以位于上述实施例所示的网络中的多个网络设备中的至少一个网络设备上。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:
S1,获取已释放的第一内存块的第一内存地址,其中,第一内存块为目标内存中待储存内存地址的内存块;
S2,对第一内存地址进行哈希计算,得到与第一内存地址对应的目标哈希值;
S3,查找目标数组中与目标哈希值对应的目标位置,其中,目标内存中的已释放内存块的内存地址存储在目标数组中与已释放内存块的内存地址的哈希值对应的位置上;
S4,在目标位置上查找到第二内存块的内存地址的情况下,将第一内存块与第二内存块合并为第三内存块。
可选地,本实施例中的具体示例可以参考上述实施例中所描述的示例,本实施例中对此不再赘述。
可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、ROM、RAM、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
根据本申请实施例的又一个方面,还提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中;计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述任一个实施例中的方法步骤。
上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
上述实施例中的集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在上述计算机可读取的存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在存储介质中,包括若干指令用以使得一台或多台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。
在本申请的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的客户端,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例中所提供的方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
以上所述仅是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。
Claims (10)
1.一种内存的处理方法,其特征在于,包括:
获取已释放的第一内存块的第一内存地址,其中,所述第一内存块为目标内存中待储存内存地址的内存块;
对所述第一内存地址进行哈希计算,得到所述第一内存地址的目标哈希值;
查找目标数组中以所述目标哈希值为下标的目标位置,其中,所述目标内存中的已释放内存块的内存地址存储在所述目标数组中以所述已释放内存块的内存地址的哈希值为下标的位置上;
在所述目标位置上查找到与所述第一内存块相邻的第二内存块的内存地址的情况下,将所述第一内存块与所述第二内存块合并为第三内存块。
2.根据权利要求1所述的方法,其特征在于,所述目标哈希值包括所述第一内存块的开始地址的第一哈希值和所述第一内存块的结束地址的第二哈希值,所述目标位置包括以所述第一哈希值为下标的第一位置和以所述第二哈希值为下标的第二位置;
将所述第一内存块与所述第二内存块合并为所述第三内存块包括:
在所述第一位置上查找到所述第二内存块的内存地址的情况下,将所述第二内存块的开始地址确定为所述第三内存块的开始地址,将所述第一内存块的结束地址确定为所述第三内存块的结束地址;
在所述第二位置上查找到所述第二内存块的内存地址的情况下,将所述第一内存块的开始地址确定为所述第三内存块的开始地址,将所述第二内存块的结束地址确定为所述第三内存块的结束地址;
在所述第一位置上查找到第一子内存块的内存地址、且在所述第二位置上查找到第二子内存块的内存地址的情况下,将所述第一子内存块的开始地址确定为所述第三内存块的开始地址,将所述第二子内存块的结束地址确定为所述第三内存块的结束地址,其中,所述第二内存块包括所述第一子内存块和所述第二子内存块。
3.根据权利要求1所述的方法,其特征在于,在将所述第一内存块与所述第二内存块合并为所述第三内存块之后,所述方法还包括:
将所述第三内存块的内存地址写入到所述目标数组中的第三位置和第四位置,其中,所述第三位置为所述目标数组中以所述第三内存块的开始地址的哈希值为下标的位置,所述第四位置为所述目标数组中以所述第三内存块的结束地址的哈希值为下标的位置上。
4.根据权利要求1所述的方法,其特征在于,在将所述第一内存块与所述第二内存块合并为所述第三内存块之后,所述方法还包括:
将所述目标数组中第五位置和第六位置上存储的所述第二内存块的内存地址移除,其中,所述第五位置为所述目标数组中以所述第二内存块的开始地址的哈希值为下标的位置,所述第六位置为所述目标数组中以所述第二内存块的结束地址的哈希值为下标的位置。
5.根据权利要求1至4中任一项所述的方法,其特征在于,所述方法还包括:
获取目标事务的内存申请指令,其中,所述内存申请用于申请目标大小的内存块;
响应所述内存申请指令,按照所述目标大小查找所述目标数组;
在查找到内存块大小大于或者等于所述目标大小的第四内存块的情况下,为所述目标事务分配第五内存块,其中,所述第五内存块为所述第四内存块中,内存大小为所述目标大小的部分。
6.根据权利要求5所述的方法,其特征在于,按照所述目标大小查找所述目标数组包括:
依次查找所述目标数组中存储的各个内存地址,确定是否存在内存块大小为所述目标大小的内存块;
在未查找到内存块大小为所述目标大小的内存块的情况下,依次查找所述目标数组中存储的各个内存地址,确定是否存在内存块大小大于所述目标大小的内存块。
7.根据权利要求5所述的方法,其特征在于,在为所述目标事务分配所述第五内存块之后,所述方法还包括:
将所述第四内存块的内存地址从所述目标数组中移除;
在所述第四内存块的大小大于所述目标大小的情况下,将第六内存块的内存地址写入到所述目标数组中以所述第六内存块的内存地址的哈希值为下标的位置上,其中,所述第六内存块为所述第四内存块中除了所述第五内存块以外的内存块。
8.一种内存的处理装置,其特征在于,包括:
第一获取单元,用于获取已释放的第一内存块的第一内存地址,其中,所述第一内存块为目标内存中待储存内存地址的内存块;
计算单元,用于对所述第一内存地址进行哈希计算,得到以所述第一内存地址为下标的目标哈希值;
第一查找单元,用于查找目标数组中以所述目标哈希值为下标的目标位置,其中,所述目标内存中的已释放内存块的内存地址存储在所述目标数据中以所述已释放内存块的内存地址的哈希值为下标的位置上;
合并单元,用于在所述目标位置上查找到与所述第一内存块相邻的第二内存块的内存地址的情况下,将所述第一内存块与所述第二内存块合并为第三内存块。
9.一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,所述处理器、所述通信接口和所述存储器通过所述通信总线完成相互间的通信,其特征在于,
所述存储器,用于存储计算机程序;
所述处理器,用于通过运行所述存储器上所存储的所述计算机程序来执行权利要求1至7中任一项所述的方法步骤。
10.一种计算机可读的存储介质,其特征在于,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行权利要求1至7中任一项中所述的方法步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011526583.3A CN112269665B (zh) | 2020-12-22 | 2020-12-22 | 内存的处理方法和装置、电子设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011526583.3A CN112269665B (zh) | 2020-12-22 | 2020-12-22 | 内存的处理方法和装置、电子设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112269665A CN112269665A (zh) | 2021-01-26 |
CN112269665B true CN112269665B (zh) | 2021-05-11 |
Family
ID=74350162
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011526583.3A Active CN112269665B (zh) | 2020-12-22 | 2020-12-22 | 内存的处理方法和装置、电子设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112269665B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113032156B (zh) * | 2021-05-25 | 2021-10-15 | 北京金山云网络技术有限公司 | 内存分配方法和装置、电子设备和存储介质 |
CN114020458B (zh) * | 2021-10-30 | 2024-10-15 | 江苏信而泰智能装备有限公司 | 一种数据资源分配方法、系统、智能终端及可读储存介质 |
CN114780158A (zh) * | 2022-04-26 | 2022-07-22 | 广东三维家信息科技有限公司 | 一种内存管理系统及内存管理方法、电子设备 |
CN115048237A (zh) * | 2022-06-27 | 2022-09-13 | 宁波三星智能电气有限公司 | 内存释放方法、装置、电子设备及存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6470360B1 (en) * | 1999-12-20 | 2002-10-22 | Sybase, Inc. | Database system with improved methodology for page allocation |
CN102402622A (zh) * | 2011-12-27 | 2012-04-04 | 北京人大金仓信息技术股份有限公司 | 嵌入式内存数据库的内存页面管理调度方法 |
CN103150257A (zh) * | 2013-02-28 | 2013-06-12 | 天脉聚源(北京)传媒科技有限公司 | 一种内存管理方法和装置 |
CN105302737A (zh) * | 2015-11-24 | 2016-02-03 | 浪潮(北京)电子信息产业有限公司 | 一种内存分配管理方法及系统 |
CN110109763A (zh) * | 2019-04-12 | 2019-08-09 | 厦门亿联网络技术股份有限公司 | 一种共享内存管理方法及装置 |
CN111352863A (zh) * | 2020-03-10 | 2020-06-30 | 腾讯科技(深圳)有限公司 | 内存管理方法、装置、设备及存储介质 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100382048C (zh) * | 2005-11-08 | 2008-04-16 | 中兴通讯股份有限公司 | 一种内存管理方法 |
CN1996258A (zh) * | 2006-12-28 | 2007-07-11 | 武汉虹旭信息技术有限责任公司 | 一种动态内存池的实现方法 |
CN105404590B (zh) * | 2015-11-10 | 2018-09-07 | 浪潮(北京)电子信息产业有限公司 | 一种内存块合并方法与系统 |
-
2020
- 2020-12-22 CN CN202011526583.3A patent/CN112269665B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6470360B1 (en) * | 1999-12-20 | 2002-10-22 | Sybase, Inc. | Database system with improved methodology for page allocation |
CN102402622A (zh) * | 2011-12-27 | 2012-04-04 | 北京人大金仓信息技术股份有限公司 | 嵌入式内存数据库的内存页面管理调度方法 |
CN103150257A (zh) * | 2013-02-28 | 2013-06-12 | 天脉聚源(北京)传媒科技有限公司 | 一种内存管理方法和装置 |
CN105302737A (zh) * | 2015-11-24 | 2016-02-03 | 浪潮(北京)电子信息产业有限公司 | 一种内存分配管理方法及系统 |
CN110109763A (zh) * | 2019-04-12 | 2019-08-09 | 厦门亿联网络技术股份有限公司 | 一种共享内存管理方法及装置 |
CN111352863A (zh) * | 2020-03-10 | 2020-06-30 | 腾讯科技(深圳)有限公司 | 内存管理方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN112269665A (zh) | 2021-01-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112269665B (zh) | 内存的处理方法和装置、电子设备和存储介质 | |
US11003625B2 (en) | Method and apparatus for operating on file | |
CN109976669B (zh) | 一种边缘存储方法、装置和存储介质 | |
CN111522574B (zh) | 差分包生成方法及相关设备 | |
CN113032156B (zh) | 内存分配方法和装置、电子设备和存储介质 | |
CN113051250A (zh) | 数据库集群的扩容方法和装置、电子设备和存储介质 | |
CN113504918A (zh) | 设备树配置优化方法、装置、计算机设备和存储介质 | |
CN112463058B (zh) | 一种碎片数据整理方法、装置及存储节点 | |
CN109213450B (zh) | 一种基于闪存阵列的关联元数据删除方法、装置及设备 | |
CN112835528A (zh) | 脏页刷新方法和装置、电子设备和存储介质 | |
CN111803917B (zh) | 资源的处理方法和装置 | |
CN104408126A (zh) | 一种数据库的持久化写入方法、装置和系统 | |
CN112650692A (zh) | 堆内存分配方法、装置及存储介质 | |
CN113268439A (zh) | 内存地址的查找方法和装置、电子设备和存储介质 | |
CN111708715B (zh) | 内存分配方法、内存分配装置及终端设备 | |
CN113971163A (zh) | 一种小文件合并存储方法、读取方法以及服务器 | |
CN111026613A (zh) | 日志处理方法及装置 | |
CN111046004A (zh) | 一种数据文件存储方法、装置、设备及存储介质 | |
CN108959517B (zh) | 文件管理方法、装置及电子设备 | |
CN115934354A (zh) | 在线存储方法和装置 | |
CN114675776A (zh) | 资源存储方法和装置、存储介质和电子设备 | |
CN114443583A (zh) | 一种碎片空间整理方法、装置、设备及存储介质 | |
CN108196790B (zh) | 数据管理方法、存储设备及计算机可读存储介质 | |
CN113448958B (zh) | 数据处理方法和装置、电子设备、存储介质 | |
EP3048541A1 (en) | File access method and device |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |