CN117033002B - 一种内存管理方法、装置、设备及存储介质 - Google Patents
一种内存管理方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN117033002B CN117033002B CN202311300873.XA CN202311300873A CN117033002B CN 117033002 B CN117033002 B CN 117033002B CN 202311300873 A CN202311300873 A CN 202311300873A CN 117033002 B CN117033002 B CN 117033002B
- Authority
- CN
- China
- Prior art keywords
- memory
- idle
- management group
- capacity
- memory management
- 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
- 230000015654 memory Effects 0.000 title claims abstract description 1340
- 238000007726 management method Methods 0.000 title claims abstract description 394
- 238000000034 method Methods 0.000 claims abstract description 75
- 230000004044 response Effects 0.000 claims abstract description 30
- 230000009469 supplementation Effects 0.000 claims abstract description 7
- 238000004590 computer program Methods 0.000 claims description 16
- 238000010586 diagram Methods 0.000 description 13
- 230000008569 process Effects 0.000 description 10
- 238000000605 extraction Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 239000013589 supplement Substances 0.000 description 2
- 230000004075 alteration Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
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/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
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
技术领域
本申请实施例涉及存储技术领域,具体而言,涉及一种内存管理方法、装置、设备及存储介质。
背景技术
在嵌入式***中,内存属于稀缺资源,在***的运行过程中,需要对有限的内存进行合理且高效的利用,内存管理方法一种是通过单向循环的链表管理内存资源,接收到内存申请时,遍历链表分配内存,另一种是将内存按照固定大小划分。
相关技术中,需要对链表进行遍历,分配内存的速率较慢,并且只能分配指定大小的内存块,内存的使用效率较低。
发明内容
本申请实施例提供一种内存管理方法、装置、设备及存储介质,旨在提高内存使用效率以及分配速率。
本申请实施例第一方面提供一种内存管理方法,该方法包括:
设置多个第一类内存管理组,每个第一类内存管理组中包括多个相同容量的内存块,不同第一类内存管理组包含的内存块的内存容量不同;
响应于接收到内存申请,在多个第一类内存管理组中确定内存申请对应的目标内存管理组;
响应于在目标内存管理组中未查找到空闲内存块,从内存字节池中申请预设容量值的内存容量;
通过内存容量,对目标内存管理组进行内存补充,得到多个空闲内存块;
将空闲内存块分配至内存申请对应的用户端。
可选地,在设置预设数量的多个内存管理组之前,该方法还包括:
确定内存空间中的空闲空间的起始地址和终止地址;
根据起始地址和终止地址,创建内存字节池。
可选地,设置多个第一类内存管理组,包括:
确定每个第一类内存管理组对应的内存容量;
根据内存容量,创建对应的第一类内存管理组。
可选地,该方法还包括:
设置一个第二类内存管理组,第二类内存管理组用于管理内存容量大于预设的内存容量阈值的内存。
可选地,响应于接收到内存申请,在多个第一类内存管理组中确定内存申请对应的目标内存管理组,包括:
确定内存申请对应的内存容量值;
在多个内存管理组中查找内存容量值对应的内存管理组;
将内存管理组作为目标内存管理组。
可选地,在多个内存管理组中查找内存容量值对应的内存管理组,包括:
将所述内存容量值与每个所述第一类内存管理组对应的内存容量值进行对比,确定所述内存容量值对应的所述第一类内存管理组。
查找多个内存管理组对应的分组索引信息;
根据分组索引信息,确定每个第一类内存管理组对应的内存容量值;
将内存容量值与每个第一类内存管理组对应的内存容量值进行对比,确定内存容量值对应的第一类内存管理组。
可选地,从内存字节池中申请预设容量值的内存容量,包括:
将内存容量申请发送至内存字节池;
接收内存字节池返回的内存容量。
可选地,通过内存容量,对目标内存管理组进行内存补充,得到多个空闲内存块,包括:
将内存容量按照目标内存管理组对应的内存块容量进行划分,得到多个内存块;
将多个内存块加入目标内存管理组对应的空闲链表中,得到多个空闲内存块。
可选地,将空闲内存块分配至内存申请对应的用户端,包括:
从目标内存管理组的空闲链表中取出空闲内存块;
将空闲内存块发送至用户端。
可选地,在将空闲内存块发送至用户端之前,该方法还包括:
将空闲内存块标记为已使用状态。
可选地,该方法还包括:
对空闲链表的地址进行更新,以使得空闲链表保存下一个空闲内存块的地址。
可选地,该方法还包括:
响应于在目标内存管理组中查找到空闲内存块,从目标内存管理组的空闲链表中取出空闲内存块;
将空闲内存块标记为已使用状态;
将空闲内存块发送至用户端。
可选地,该方法还包括:
对空闲链表的地址进行更新,以使得空闲链表保存下一个空闲内存块的地址。
可选地,该方法还包括:
响应于分配至用户端的空闲内存块进行内存释放,将空闲内存块标记为空闲状态。
可选地,该方法还包括:
对目标内存管理组的空闲链表的地址进行更新,以使得空闲链表保存空闲内存块的地址。
可选地,该方法还包括:
响应于目标内存管理组中最近一次申请的内存容量对应的内存块均为空闲内存块,对内存块进行内存释放,以使得内存容量归还至内存字节池。
可选地,该方法还包括:
响应于内存申请对应的内存容量值大于预设的内存容量阈值,确定内存申请对应的内存管理组为第二类内存管理组;
根据内存容量值,确定内存容量值对应的申请内存容量值;
通过第二类内存管理组向内存字节池申请申请内存容量值对应的内存容量;
从第二类内存管理组对应的空闲链表中,将申请到的内存容量分配至用户端。
可选地,从第二类内存管理组对应的空闲链表中,将申请到的内存容量分配至用户端,包括:
将内存容量从空闲链表中取出;
将内存容量标记为已使用状态;
将内存容量发送至用户端。
可选地,该方法还包括:
响应于用户端释放内存容量,将内存容量归还至内存字节池。
本申请实施例第二方面提供一种内存管理装置,装置包括:
内存管理组设置模块,用于设置多个第一类内存管理组,每个第一类内存管理组中包括多个相同容量的内存块,不同第一类内存管理组包含的内存块的内存容量不同;
内存管理组确定模块,用于响应于接收到内存申请,在多个第一类内存管理组中确定内存申请对应的目标内存管理组;
内存容量申请模块,用于响应于在目标内存管理组中未查找到空闲内存块,从内存字节池中申请预设容量值的内存容量;
空闲内存块获得模块,用于通过内存容量,对目标内存管理组进行内存补充,得到多个空闲内存块;
内存分配模块,用于将空闲内存块分配至内存申请对应的用户端。
可选地,装置还包括内存字节池创建模块,模块包括:
地址确定子模块,用于确定内存空间中的空闲空间的起始地址和终止地址;
内存字节池创建子模块,用于根据起始地址和终止地址,创建内存字节池。
可选地,内存管理组设置模块包括:
内存容量确定子模块,用于确定每个第一类内存管理组对应的内存容量;
内存管理组创建子模块,用于根据内存容量,创建对应的第一类内存管理组。
可选地,装置还包括:
第二类内存管理组设置子模块,用于设置一个第二类内存管理组,第二类内存管理组用于管理内存容量大于预设的内存容量阈值的内存。
可选地,内存管理组确定模块包括:
内存容量值确定子模块,用于确定内存申请对应的内存容量值;
内存管理组查找子模块,用于在多个内存管理组中查找内存容量值对应的内存管理组;
目标内存管理组确定子模块,用于将内存管理组作为目标内存管理组。
可选地,内存管理组查找子模块包括:
分组索引信息查找子模块,用于查找多个内存管理组对应的分组索引信息;
分组索引信息确定子模块,用于根据分组索引信息,确定每个第一类内存管理组对应的内存容量值;
内存管理组确定子模块,用于将内存容量值与每个第一类内存管理组对应的内存容量值进行对比,确定内存容量值对应的第一类内存管理组。
可选地,内存容量申请模块包括:
内存容量申请发送子模块,用于将内存容量申请发送至内存字节池;
内存容量接收子模块,用于接收内存字节池返回的内存容量。
可选地,空闲内存块获得包括:
内存容量划分子模块,用于将内存容量按照目标内存管理组对应的内存块容量进行划分,得到多个内存块;
空闲内存块获得子模块,用于将多个内存块加入目标内存管理组对应的空闲链表中,得到多个空闲内存块。
可选地,内存分配模块包括:
空闲内存块取出子模块,用于从目标内存管理组的空闲链表中取出空闲内存块;
空闲内存块发送子模块,用于将空闲内存块发送至用户端。
可选地,内存分配模块还包括:
标记子模块,用于将空闲内存块标记为已使用状态。
可选地,内存分配模块还包括:
地址更新子模块,用于对空闲链表的地址进行更新,以使得空闲链表保存下一个空闲内存块的地址。
可选地,装置还包括:
空闲内存快取出模块,用于响应于在目标内存管理组中查找到空闲内存块,从目标内存管理组的空闲链表中取出空闲内存块;
标记模块,用于将空闲内存块标记为已使用状态;
第二内存分配模块,用于将空闲内存块发送至用户端。
可选地,第二内存分配模块还包括:
地址更新模块,用于对空闲链表的地址进行更新,以使得空闲链表保存下一个空闲内存块的地址。
可选地,装置还包括:
空闲状态标记模块,用于响应于分配至用户端的空闲内存块进行内存释放,将空闲内存块标记为空闲状态。
可选地,空闲状态标记模块还包括:
第二地址更新子模块,用于对目标内存管理组的空闲链表的地址进行更新,以使得空闲链表保存空闲内存块的地址。
可选地,装置还包括:
第一内存容量归还模块,用于响应于目标内存管理组中最近一次申请的内存容量对应的内存块均为空闲内存块,对内存块进行内存释放,以使得内存容量归还至内存字节池。
可选地,装置还包括:
第二类内存管理组确定模块,用于响应于内存申请对应的内存容量值大于预设的内存容量阈值,确定内存申请对应的内存管理组为第二类内存管理组;
申请内存容量值确定模块,用于根据内存容量值,确定内存容量值对应的申请内存容量值;
特殊管理组内存容量申请模块,用于通过第二类内存管理组向内存字节池申请申请内存容量值对应的内存容量;
第三内存分配模块,用于从第二类内存管理组对应的空闲链表中,将申请到的内存容量分配至用户端。
可选地,第三内存分配模块包括:
内存容量取出子模块,用于将内存容量从空闲链表中取出;
内存容量标记子模块,用于将内存容量标记为已使用状态;
内存容量发送子模块,用于将内存容量发送至用户端。
可选地,装置还包括:
第二内存容量归还模块,用于响应于用户端释放内存容量,将内存容量归还至内存字节池。
本申请实施例第三方面提供一种非易失性可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时,实现如本申请第一方面的方法中的步骤。
本申请实施例第四方面提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时,实现本申请第一方面的方法的步骤。
采用本申请提供的内存管理方法,设置多个第一类内存管理组,每个第一类内存管理组中包括多个相同容量的内存块,不同第一类内存管理组包含的内存块的内存容量不同;响应于接收到内存申请,在多个第一类内存管理组中确定内存申请对应的目标内存管理组;响应于在目标内存管理组中未查找到空闲内存块,从内存字节池中申请预设容量值的内存容量;通过内存容量,对目标内存管理组进行内存补充,得到多个空闲内存块;将空闲内存块分配至内存申请对应的用户端。
本方法中,对内存进行分组管理,每个内存管理组管理不同大小的内存容量,在用户端进行内存申请时,根据用户端申请的内存的大小,确定对应的内存管理组,当内存管理组中没有空闲内存块时,从内存字节池中申请一定大小的内存,再按照内存管理组管理的内存容量分成多个内存块,得到多个空闲内存块,再将该空闲内存块分配至用户端中,这样的分配方式可以对内存进行灵活的管理,通过设置了多个不同的内存管理组,灵活应对不同的内存申请,对于每个内存申请,都可以通过对应的内存管理组分配合适的内存容量,提升了内存分配的速率和内存使用的效率,提升了***的整体运行速率。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本申请一实施例提出的内存管理方法的流程图;
图2是本申请一实施例提出的内存字节池创建示意图;
图3是本申请一实施例提出的内存分配流程示意图;
图4是本申请一实施例提出的内存管理装置的示意图;
图5是本申请一实施例提出的内存管理设备的示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有付出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
参考图1,图1是本申请一实施例提出的内存管理方法的流程图。如图1所示,该该方法包括以下步骤:
S11:设置多个第一类内存管理组,每个第一类内存管理组中包括多个相同容量的内存块,不同第一类内存管理组包含的内存块的内存容量不同。
本实施例中,在计算机***中,变量、中间数据一般放在***存储空间中,只有在实际使用时才将数据从存储空间中调入到中央处理器中进行计算。存储空间的类型分为两种:内部存储空间和外部存储空间,内部存储空间的访问速度比较快,能够按照变量地址随机的访问,即随机存储器(RAM),又称为计算机内存。在嵌入式***的设计中,内存属于稀缺资源,若内存使用率较低,会造成大量内存资源的浪费,***正常运行时,就需要配置更大容量的内存,进而增加了***的运行成本,若内存的分配速率较低,则动态申请内存时,会消耗更多的时间,使得嵌入式***运行较慢。内存的使用效率、内存分配速率是影响嵌入式***性能的关键因素,提高了内存使用效率,内存分配速率,会显著的提高嵌入式***的性能。
本实施例中,内存管理组就是对计算机内存进行管理的一个管理单元。内存块是内存空间中分割出的一小段连续的内存空间,内存块的起始地址和终止地址之间的内存空间是连续的。第一类内存管理组用于管理少于预设的内存容量阈值的内存,第一类内存管理组中的内存容量被划分为多个内存块。
本实施例中,为了对内存进行管理,设置了多个内存管理组,根据嵌入式***中需要管理的内存的到小,对各个内存管理组管理的内存大小进行设置,每个内存管理组中包括多个相同容量的内存块,这多个容量相同的内存块由链表进行串联,在需要进行分配时从链表中取出进行分配,不同的内存管理组包含的内存块的内存容量不同。在设置内存管理组时,预设需要进行管理的不同大小的内存容量,再设置对应的管理组来管理对应大小的内存容量,例如管理组1管理第一预设大小的内存容量,管理组2管理第二预设大小的内存容量等。
本实施例中,设置多个内存管理组的具体步骤包括:
S11-1:确定每个第一类内存管理组对应的内存容量。
本实施例中,在设置内存管理组时,预先确定每个管理组对应的内存容量,一般在设置内存容量时,按照由小到大的内存容量进行排序,每个内存管理容量在设置时呈倍数线性递增。
示例地,需要管理的嵌入式***为ThreadX***,确定需要管理的内存容量依次为8字节、16字节、32字节、64字节、128字节、256字节、512字节、1024字节。还可以设置一个特殊分组,用于管理大于1024字节的内存容量。
S11-2:根据内存容量,创建对应的第一类内存管理组。
本实施例中,在确定需要进行管理的内存容量的大小之后,根据确定的内存容量,创建对应的内存管理组,在创建内存管理组时,根据预先设置的内存容量,为每个内存容量指定一个对应的管理组进行管理,内存管理组的数量与预先设置的内存容量的数量相同。
示例地,使用内存管理组0管理8字节大小的内存,使用内存管理组1管理16字节大小的内存,使用内存管理组2管理32字节大小的内存,使用内存管理组3管理64字节大小的内幕车内,使用内存管理组4管理128字节大小的内存,使用内存管理组5管理256字节大小的内存,使用内存管理组6管理512字节大小的内存,使用内存管理组7管理1024字节大小的内存,使用内存管理组8管理大于1024字节的内存。
S12:响应于接收到内存申请,在多个第一类内存管理组中确定内存申请对应的目标内存管理组。
本实施例中,内存申请是由用户端向***的后台发送的申请,用于申请一定大小的内存,内存申请中包括了用户的信息以及需要申请内存的大小。目标内存管理组与内存申请对应的内存管理组。
本实施例中,当***接收到内存申请时,确定内存申请中需要申请的内存的内存容量大小,然后查找分组索引信息,查找到该内存容量对应的内存管理组,将查找到的内存管理组作为目标内存管理组,在查找内存管理组时,内存管理组所管理的内存容量要大于用户申请的内存容量。
本实施例中,响应于接收到内存申请,在多个第一类内存管理组中确定内存申请对应的目标内存管理组的具体步骤为:
S12-1:确定内存申请对应的内存容量值。
本实施例中,在接收到内存申请时,确定内存申请对应的内存容量值,在确定内存容量值时,对用户发送的内存申请进行解析,确定用户发送的内存申请中包含的内存容量值。
示例地,用户发出的内存申请的内容为“申请8字节大小的内存容量”,后台对该内存申请进行解析,得到该内存申请对应的内存容量值为8字节。
S12-2:在多个内存管理组中查找内存容量值对应的内存管理组。
本实施例中,在确定用户需要的内存容量值后,在多个内存管理组中查找该内存容量对应的内存管理组,具体的步骤包括:
查找所述多个第一类内存管理组对应的分组索引信息;
根据所述分组索引信息,确定每个所述第一类内存管理组对应的内存容量值;
将所述内存容量值与每个所述第一类内存管理组对应的内存容量值进行对比,确定所述内存容量值对应的所述第一类内存管理组。
S12-2-1:查找多个第一类内存管理组对应的分组索引信息。
本实施例中,分组索引信息包括了内存管理组的管理组名称、管理组管理的字节大小等信息。
本实施例中,在确定需要申请的内存容量值后,在后台存储的分组索引信息中,查找多个内存管理组的分组索引信息,该分组索引信息以存储在分组索引列表中,列表中记录有每个内存管理组的名称以及每个内存管理组管理的字节的大小,对该分组索引列表中的分组索引信息进行查询,即可确定该内存值容量对应的内存管理组。
示例地,内存管理组的名称按照内存管理组0到内存管理组8分别为“cache_node0(8字节)、cache_node1(16字节)、……、cache_node8(>1024字节)”。
S12-2-2:根据分组索引信息,确定每个第一类内存管理组对应的内存容量值。
S12-2-3:将内存容量值与每个第一类内存管理组对应的内存容量值进行对比,确定内存容量值对应的第一类内存管理组。
本实施例中,根据该分组索引信息,确定该内存容量值对应的内存管理组,即确定了为用户分配内存的内存管理组,在确定用户申请的内存容量对应的内存管理组时,将用户申请的内存容量值与每个第一类内存管理组对应的内存容量值进行对比,选择大于用户申请的内存容量值的第一内存管理组,作为该用户的内存容量申请对应的内存管理组。
示例地,在确定用户申请的容量为6字节时,确定该内存容量对应的内存管理组为cache_node0(负责管理8字节内存),在确定用户申请的容量为100字节时,确定该内存容量对应的内存管理组为cache_node4(负责管理128字节的内存),在确定用户申请的容量为3000字节时,确定该内存容量对应的内存管理组为cache_node8(负责管理大于1024字节的内存)。
S12-3:将该内存管理组作为目标内存管理组。
S13:响应于在目标内存管理组中未查找到空闲内存块,从内存字节池中申请预设容量值的内存容量。
本实施例中,空闲内存块是未被使用的内存块,其中未存储数据,可以随时进行使用。内存字节池是在内存空间中,根据空闲内存空间的起始地址与终止地址创建出的存储空间,是一个空间容量大且存储地址连续的空间。预设容量值是预先设置的内存管理组在没有空闲内存块时,向内存字节池申请的内存容量的值。
本实施例中,当确定目标内存管理组后,在目标内存管理组的空闲链表中查找空闲内存块,当未查找到空闲内存块时,说明内存管理组中没有可以调用的内存块,内存块都已经被占用,此时内存管理组从内存字节池中申请预设容量值的内存容量,以补充内存管理组中的内存块。
示例地,预设容量值为2048个字节。
本实施例中,从内存字节池中申请预设容量值的内存容量的具体步骤包括:
S13-1:将内存容量申请发送至内存字节池。
本实施例中,内存容量申请是内存管理组发送至内存直接池的申请,用于向内存字节池申请一定大小的内存,内存容量申请中包含了内存管理组的信息以及需要申请的内存容量的值。
本实施例中,内存管理组将内存容量申请发送至内存字节池中,内存字节池在接收到内存容量申请之后,根据内存容量申请中包含的内存管理组信息以及申请的内存容量值的信息,将对应的内存容量发送至该内存管理组中。
示例地,内存容量申请为“cache_node3申请2048个字节的内存”。
S13-2:接收内存字节池返回的内存容量。
本实施例中,当内存字节池向内存管理组发送内存容量时,内存管理组接收内存字节池返回的内存容量。
S14:通过内存容量,对目标内存管理组进行内存补充,得到多个空闲内存块。
本实施例中,内存管理组在获取到内存字节池发送的内存容量后,将得到的内存容量按照内存管理组管理的内存容量进行划分,得到多个内存块,再将这些内存快加入内存管理组的空闲链表之中,得到多个空闲内存块。
本实施例中,通过内存容量,对目标内存管理组进行内存补充,得到多个空闲内存块的步骤包括:
S14-1:将内存容量按照目标内存管理组对应的内存块容量进行划分,得到多个内存块。
本实施例中,目标内存管理组在在得到申请的内存容量之后,根据该内存管理组对应的内存块容量,将得到的内存容量划分为多个相同大小的内存块,得到多个内存块,为了保证内存块划分时不留下多余的内存,内存管理组对应的内存块容量与内存容量申请对应的预设容量值是倍数关系,内存块的内存容量大小可以被申请的内存容量整除,这样方便了内存容量的划分。
示例地,内存管理组6(负责管理512字节内存)向内存字节池申请了2048字节的内存,则按照内存管理组6负责管理的内存容量大小进行划分,得到了2048/512=4个内存块。
S14-2:将多个内存块加入目标内存管理组对应的空闲链表中,得到多个空闲内存块。
本实施例中,链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。空闲链表是由空闲内存块组成的链表。
本实施例中,将多个划分好的内存块加入给目标内存管理组对应的空闲链表中,即将这多个内存块的起止地址连接起来,通过链表结构进行存储,得到了多个空闲内存块。
S15:将空闲内存块分配至内存申请对应的用户端。
本实施例中,在得到空闲内存块之后,将得到的多个空闲内存块中的一个空闲内存块分配至发出该内存申请的用户端,用户端可以使用该内存块存储任意指定的数据,在将空闲内存块分配至该用户端时,将分配的内存块标记为已使用,同时还要对空闲链表进行更新,使该空闲链表的保存着下一个空闲内存块的地址。
示例地,空闲链表中依次有空闲内存块1、空闲内存块2、空闲内存块3、空闲内存块4,将空闲内存块1取出并发送至提出内存申请的用户端。
本实施例中,将空闲内存块分配至内存申请对应的用户端的具体步骤包括:
S15-1:从目标内存管理组的空闲链表中取出空闲内存块。
本实施例中,在目标内存管理组补充了新的空闲内存块之后,从目标内存管理组的空闲链表中取出空闲块。
S15-2:将空闲内存块发送至用户端。
本实施例中,在目标内存管理组取出了该空闲内存块之后,将获得的空闲内存块发送至用户端。用户可以使用该内存块存储任意数据。
在本申请的另一个实施例中,在将空闲内存块发送至用户端之前,该方法还包括:
S15-3:将空闲内存块标记为已使用状态。
本实施例中,为了方便对内存块进行管理,在将空闲内存块发送至用户端之前,将待发送的空闲内存块标记为已使用状态,这样便于将已使用的内存块与现有的空闲内存块进行区分。
在本申请的另一个实施例中,该方法还包括:
S15-4:对空闲链表的地址进行更新,以使得空闲链表保存下一个空闲内存块的地址。
本实施例中,目标内存管理组将空闲内存块分配至用户端后,对空闲链表的地址进行更新,空闲链表的地址更新之后,保存下一个空闲内存块的地址,每个空闲内存块的起始地址与终止地址不同,代表了内存块在内存空间中的位置不同,通过空闲链表将空闲内存块串联在一起。
示例地,空闲链表中依次有空闲内存块1、空闲内存块2、空闲内存块3、空闲内存块4,将空闲内存块1取出并发送至提出内存申请的用户端。对空闲链表进行更新,使空闲链表保存空闲内存块2的地址,下次访问该内存管理组时,直接取用空闲内存块2。
本实施例中,为了方便对内存进行管理,设置了多个内存管理组,不痛的内存管理组用于管理不同大小的内存,每个内存管理组中包括了多个相同大小的内存块,在用户申请内存时,根据用户申请的内存大小,通过对应的内存管理组为用户端分配对应大小的内存块,当内存管理组中未查找到空闲内存块时,向内存字节池中申请预设容量值的内存,将申请到的内存按照内存管理组管理的内存容量值进行划分,的多个空闲内存块,再将其中一个空闲内存块分配至用户端,以此方式对内存进行管理,可以灵活的处理不同大小的内存申请,提升了内存分配的速率,进而提升了整个嵌入式***的运行速率。
在本申请的另一个实施例中,该方法还包括:
S21:响应于在目标内存管理组中查找到空闲内存块,从目标内存管理组的空闲链表中取出空闲内存块。
本实施例中,内存管理组中存在空闲内存块时,在接收到用户的内存申请时,在目标内存管理组中直接查找到空闲内存块,即直接在空闲链表中获取到该空闲内存块的起始地址。
示例地,目标内存管理组中存在空闲内存块1,在接收到用户的内存申请时,直接从内存管理组中的空闲链表中取出该空闲内存块1。
S22:将空闲内存块标记为已使用状态。
本实施例中,本实施例中,为了方便对内存块进行管理,在将空闲内存块发送至用户端之前,将待发送的空闲内存块标记为已使用状态,这样便于将已使用的内存块与现有的空闲内存块进行区分。
S23:将空闲内存块发送至用户端。
本实施例中,在从空闲链表中取出空闲内存块之后,根据用户发送的内内存申请中包括的用户信息,确定用户端的地址,将该空闲内存块发送至用户端。
在本申请的另一个实施例中,该方法还包括:
S24:对空闲链表的地址进行更新,以使得空闲链表保存下一个空闲内存块的地址。
本实施例中,在将空闲链表中的空闲内存块发送至用户端之后,对空闲链表的地址进行更新,使得空闲链表保存下一个空闲内存块的地址。
本实施例中,当内存管理组中存在空闲内存块时,直接将空闲内存块发送至用户端,不需要向字节池申请内存容量,提升了内存的分配效率。
在本申请的另一个实施例中,该方法还包括:
S31:响应于分配至用户端的空闲内存块进行内存释放,将空闲内存块标记为空闲状态。
本实施例中,内存释放指将内存块中保存的数据进行移除,使得该内存块中不存储数据。
本实施例中,当用户端使用完毕该内存块之后,对该内存块进行内存释放,该内存块对应的内存管理组检测到用户端对该内存块进行了内存释放之后,将该内存块标记为空闲状态,恢复为空闲内存块,再加入该内存管理组中的空闲链表中。
本实施例中,在用户端对内存块进行内存释放之后,内存管理组将内存块归还至空闲链表中,并且将该内存块标记为空闲状态,保证了该内存块的高效利用。
在本申请的另一个实施例中,该方法还包括:
S32:对目标内存管理组的空闲链表的地址进行更新,以使得空闲链表保存空闲内存块的地址。
本实施例中,在将用户进行内存释放后的空闲内存块重新放入目标内存管理组的空闲链表中之后,对空闲链表的地址进行更新,将空闲链表指针所指的地址由原来的地址更新为该空闲内存块的地址,使得空闲链表保存该空闲内存块的地址。
本实施例中,在将空闲内存块归还至空闲链表之后,对空闲链表的地址进行更新,保证了内存管理组可以对该空闲内存块进行及时的管理,提升了内存的分配效率。
在本申请的另一个实施例中,该方法还包括:
S41:响应于目标内存管理组中最近一次申请的内存容量对应的内存块均为空闲内存块,对内存块进行内存释放,以使得内存容量归还至内存字节池。
本实施例中,当内存管理组中最近一次从内存字节池中申请到的内存容量对应的内存块都为空闲内存块时,对这些内存块进行内存释放,将内存容量归还至内存字节池中。
示例地,内存管理组6中有4个空闲内存块,这4个空闲内存块的大小为512字节,是最近一次申请的内存容量划分出的内存块,内存管理组检测到有4个空闲内存块且该4个空闲内存块均为最近一次从内存字节池中申请到的内存容量划分出的内存块,则将这4个内存块从空闲链表中取出,归还至内存字节池中。
本实施例中,当内存管理组中最近一次从内存字节池中申请到的内存容量对应的内存块均为空闲内存块时,直接将最近一次申请到的内存进行释放,将该内存容量归还至字节池,在有需要的时候再次从内存字节池中申请内存容量,保证了对空闲存储资源的合理利用。
在本申请的另一个实施例中,该方法还包括:
S51:响应于内存申请对应的内存容量值大于预设的内存容量阈值,确定内存申请对应的内存管理组为第二类内存管理组。
本实施例中,预设的内存容量阈值是预先设置的内存申请对应的内存容量的最大值,高于该内存容量阈值的内存申请,由第二类内存管理组进行管理。第二类内存管理组用于管理所有内存申请中对应的内存容量大于预设的内存容量阈值的内存申请。
本实施例中,基于嵌入式***的特性,当内存容量值大于预设的内存容量阈值时,需要分配的内存容量大于一个页,即2048个字节,此时由第二类内存管理组对该内存申请进行处理,将该内存申请对应的内存管理组确定为第二类内存管理组。
示例地,用户发出的内存申请对应的内存容量值为3000个字节,预设的内存容量阈值为1024字节,用户申请的内存容量值大于预设的内存容量阈值,则使用第二类内存管理组,即“cache_node8”来处理该内存申请。
S52:根据内存容量值,确定内存容量值对应的申请内存容量值。
本实施例中,申请内存容量值是第二类内存管理组向内存字节池申请的内存容量值。
本实施例中,基于嵌入式***的特性,根据该内存容量值,计算出该内存容量值对应的申请内存容量值,在每个内存管理组中,在内存块之上还存在内存页,一个内存页可以存储的字节为2048个字节,当申请内存大于1024个字节时,需要使用的内存空间大于一个内存页,因为除了实际使用的1024个字节,还需要存储一些基础数据,因此在申请内存容量时,直接申请2048的整数倍,即按内存页为单位申请内存容量值。
示例地,第二类内存管理组向内存字节池申请的内存容量为nn*2048字节大小的内存,其中n = (x - 1)/2048 + 1,x为待申请内存大小。
S53:通过第二类内存管理组向内存字节池申请申请内存容量值对应的内存容量。
本实施例中,在第二类内存管理组确定该内存申请对应的内存容量后,向内存字节池申请该申请内存容量值对应的内存容量,内存字节池接收到申请后,将对应的内存容量发送至第二类内存管理组。
S54:从第二类内存管理组对应的空闲链表中,将申请到的内存容量分配至用户端。
本实施例中,第二类内存管理组将申请到的内存放入空闲链表中,再将空闲链表中的内存取出,分配至用户端。
本实施例中,从第二类内存管理组对应的空闲链表中,将申请到的内存容量分配至用户端的具体步骤包括:
S54-1:将内存容量从空闲链表中取出。
本实施例中,第二类内存管理组将申请到的内存容量从对应的空闲链表中取出。
S54-2:将内存容量标记为已使用状态。
本实施例中,在取出该内存容量时,将该内存容量标记为已使用状态。
S54-3:将内存容量发送至用户端。
本实施例中,第二类内存管理组将取出的内存容量发送至用户端。
本实施例中,当用户申请的内存容量大于预设的内存容量阈值时,通过第二类内存管理组对该内存申请进行处理,从字节池中直接取出对应的内存容量,发送至用户端,对较大内存容量的申请,以内存页为单位分配内存,满足了用户对大内存容量的需求,保证了嵌入式***的稳定运行,提升了内存分配的效率。
在本申请的另一个实施例中,该方法还包括:
S61:响应于用户端释放内存容量,将内存容量归还至内存字节池。
本实施例中,当用户端使用完第二类内存管理组分配的内存容量之后,对内存容量进行释放,第二类内存管理组检测到该内存容量被释放了之后,将内存容量规划至内存字节池。
本实施例中,在用户端释放内存容量之后,直接将内存容量归还至内存字节池,保证了对内存的充分利用,提升了***的运行效率。
在本申请另一个实施例中,在设置预设数量的多个内存管理组之前,该方法还包括:
S71:确定内存空间中的空闲空间的起始地址和终止地址。
本实施例中,内存空间是***中的内存中的存储数据的空间。空闲空间是内存空间中未存储数据的连续的存储空间。起始地址是空闲空间在内存中的起始位置的地址,终止地址是空闲空间在内存空间中的终止地址。
本实施例中,在创建内存管理组之前,确定内存空间中的空闲空间的起始地址和终止地址。空闲空间也称作未被分配的内存。
S72:根据起始地址和终止地址,创建内存字节池。
本年实施例中,在确定了空闲空间的起始地址和终止地址后,将起始地址和终止地址之间的连续存储空间指定为内存字节池,完成内存字节池的创建。
参考图2,图2是本申请一实施例提出的内存字节池创建示意图,如图2所示,获取图中“未被分配的内存2”的起始地址和终止地址,作为内存管理的可用空间,据此创建内存字节池,其中过的栈、堆分别具备向下、向上增长的特点,但其只会在预设的范围内增长,不会侵占内存字节池的空间,不会导致“未被分配的内存2”的起止地址发生变化。
参考图3,图3是本申请一实施例提出的内存分配流程示意图,如图3所示,其中一共有9个cache_node(缓存节点),将每个缓存节点视为一个内存管理组,即一共有9个内存管理组,分别为cache_node0(内存管理组0)管理大小为8Byte(8字节)的内存,cache_node1(内存管理组1)管理大小为16Byte(16字节)的内存,cache_node2(内存管理组2)管理大小为32Byte(32字节)的内存,cache_node3(内存管理组3)管理大小为64Byte(64字节)的内存,cache_node(内存管理组4)管理大小为128Byte(128字节)内存,cache_node5(内存管理组5)管理大小为256Byte(256字节)的内存,cache_node6(内存管理组6)管理大小为512Byte(512字节)的内存,cache_node7(内存管理组7)管理大小为1024Byte(1024字节)的内存,cache_node8(内存管理组8)管理Spec(大于预设的容量阈值)的内存,以cache_node5为例,其中包括partial(部分占用),full(全部占用),freelist(空闲链表),obj代表内存块,内存字节池中为每个链表分配2048Byte(2048字节)的内存容量,cache_node8(内存管理组8)直接向内存字节池申请2048Byte(字节)的内存容量,free为空闲内存。
本申请实施例中,将内存字节池按照指定内存块大小进行分配,可以有效的减少传统的内存池管理方法中,按字节分配、管理过程中反复分配、释放内存时产生的内存碎片,提升了内存的利用率。引入了分组管理机制,分配内存的灵活性高,分配效率增加。在分组管理机制中增加了第二类内存管理组,有效提高了内存的使用率,避免了用户申请过大的内存时造成的大量内存浪费,在用户申请内存时,优为用户分配空闲内存块,增加了内存分配的速率,实现了内存使用效率与内存分配速率的提升。
基于同一发明构思,本申请一实施例提供一种内存管理装置。参考图4,图4是本申请一实施例提出的内存管理装置400的示意图。如图4所示,该装置包括:
内存管理组设置模块401,用于设置多个第一类内存管理组,每个第一类内存管理组中包括多个相同容量的内存块,不同第一类内存管理组包含的内存块的内存容量不同;
内存管理组确定模块402,用于响应于接收到内存申请,在多个第一类内存管理组中确定内存申请对应的目标内存管理组;
内存容量申请模块403,用于响应于在目标内存管理组中未查找到空闲内存块,从内存字节池中申请预设容量值的内存容量;
空闲内存块获得模块404,用于通过内存容量,对目标内存管理组进行内存补充,得到多个空闲内存块;
内存分配模块405,用于将空闲内存块分配至内存申请对应的用户端。
可选地,装置还包括内存字节池创建模块,模块包括:
地址确定子模块,用于确定内存空间中的空闲空间的起始地址和终止地址;
内存字节池创建子模块,用于根据起始地址和终止地址,创建内存字节池。
作为本申请的一个实施例,内存管理组设置模块包括:
内存容量确定子模块,用于确定每个第一类内存管理组对应的内存容量;
内存管理组创建子模块,用于根据内存容量,创建对应的第一类内存管理组。
作为本申请的一个实施例,装置还包括:
第二类内存管理组设置子模块,用于设置一个第二类内存管理组,第二类内存管理组用于管理内存容量大于预设的内存容量阈值的内存。
作为本申请的一个实施例,内存管理组确定模块包括:
内存容量值确定子模块,用于确定内存申请对应的内存容量值;
内存管理组查找子模块,用于在多个内存管理组中查找内存容量值对应的内存管理组;
目标内存管理组确定子模块,用于将内存管理组作为目标内存管理组。
作为本申请的一个实施例,内存管理组查找子模块包括:
分组索引信息查找子模块,用于查找多个内存管理组对应的分组索引信息;
分组索引信息确定子模块,用于根据分组索引信息,确定每个第一类内存管理组对应的内存容量值;
内存管理组确定子模块,用于将内存容量值与每个第一类内存管理组对应的内存容量值进行对比,确定内存容量值对应的第一类内存管理组。
作为本申请的一个实施例,内存容量申请模块包括:
内存容量申请发送子模块,用于将内存容量申请发送至内存字节池;
内存容量接收子模块,用于接收内存字节池返回的内存容量。
作为本申请的一个实施例,空闲内存块获得包括:
内存容量划分子模块,用于将内存容量按照目标内存管理组对应的内存块容量进行划分,得到多个内存块;
空闲内存块获得子模块,用于将多个内存块加入目标内存管理组对应的空闲链表中,得到多个空闲内存块。
作为本申请的一个实施例,内存分配模块包括:
空闲内存块取出子模块,用于从目标内存管理组的空闲链表中取出空闲内存块;
空闲内存块发送子模块,用于将空闲内存块发送至用户端。
作为本申请的一个实施例,内存分配模块还包括:
标记子模块,用于将空闲内存块标记为已使用状态。
作为本申请的一个实施例,内存分配模块还包括:
地址更新子模块,用于对空闲链表的地址进行更新,以使得空闲链表保存下一个空闲内存块的地址。
作为本申请的一个实施例,装置还包括:
空闲内存快取出模块,用于响应于在目标内存管理组中查找到空闲内存块,从目标内存管理组的空闲链表中取出空闲内存块;
标记模块,用于将空闲内存块标记为已使用状态;
第二内存分配模块,用于将空闲内存块发送至用户端。
作为本申请的一个实施例,第二内存分配模块还包括:
地址更新模块,用于对空闲链表的地址进行更新,以使得空闲链表保存下一个空闲内存块的地址。
作为本申请的一个实施例,装置还包括:
空闲状态标记模块,用于响应于分配至用户端的空闲内存块进行内存释放,将空闲内存块标记为空闲状态。
作为本申请的一个实施例,空闲状态标记模块还包括:
第二地址更新子模块,用于对目标内存管理组的空闲链表的地址进行更新,以使得空闲链表保存空闲内存块的地址。
作为本申请的一个实施例,装置还包括:
第一内存容量归还模块,用于响应于目标内存管理组中最近一次申请的内存容量对应的内存块均为空闲内存块,对内存块进行内存释放,以使得内存容量归还至内存字节池。
作为本申请的一个实施例,装置还包括:
第二类内存管理组确定模块,用于响应于内存申请对应的内存容量值大于预设的内存容量阈值,确定内存申请对应的内存管理组为第二类内存管理组;
申请内存容量值确定模块,用于根据内存容量值,确定内存容量值对应的申请内存容量值;
特殊管理组内存容量申请模块,用于通过第二类内存管理组向内存字节池申请申请内存容量值对应的内存容量;
第三内存分配模块,用于从第二类内存管理组对应的空闲链表中,将申请到的内存容量分配至用户端。
作为本申请的一个实施例,第三内存分配模块包括:
内存容量取出子模块,用于将内存容量从空闲链表中取出;
内存容量标记子模块,用于将内存容量标记为已使用状态;
内存容量发送子模块,用于将内存容量发送至用户端。
作为本申请的一个实施例,装置还包括:
第二内存容量归还模块,用于响应于用户端释放内存容量,将内存容量归还至内存字节池。
基于同一发明构思,本申请另一实施例提供一种非易失性可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本申请上述任一实施例的内存管理方法中的步骤。
基于同一发明构思,本申请另一实施例提供一种电子设备,参考图5,图5是本申请一实施例提出的内存管理设备500的示意图,包括存储器501、处理器502及存储在存储器上并可在处理器上运行的计算机程序,处理器执行时实现本申请上述任一实施例的内存管理方法中的步骤。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本领域内的技术人员应明白,本申请实施例可提供为方法、装置、或计算机程序产品。因此,本申请实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请实施例是参照根据本申请实施例的方法、终端设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请实施例范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本申请所提供的内存管理方法、装置、设备及存储介质,进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上,本说明书内容不应理解为对本申请的限制。
Claims (21)
1.一种内存管理方法,其特征在于,所述方法包括:
设置多个第一类内存管理组,每个所述第一类内存管理组中包括多个相同容量的内存块,不同内存管理组包含的内存块的内存容量不同,每个所述第一类内存管理组管理对应内存容量的内存块;
响应于接收到内存申请,确定所述内存申请对应的目标内存管理组;
响应于在所述目标内存管理组中未查找到空闲内存块,从内存字节池中申请预设容量值的内存容量;
通过所述内存容量,对所述目标内存管理组进行内存补充,得到多个所述空闲内存块;
将所述空闲内存块分配至所述内存申请对应的用户端;
响应于所述目标内存管理组中最近一次申请的所述内存容量对应的内存块均为空闲内存块,对所述内存块进行内存释放,以使得所述内存容量归还至所述内存字节池。
2.根据权利要求1所述的方法,其特征在于,在设置多个第一类内存管理组之前,所述方法还包括:
确定内存空间中的空闲空间的起始地址和终止地址;
根据所述起始地址和终止地址,创建所述内存字节池。
3.根据权利要求1所述的方法,其特征在于,所述设置多个第一类内存管理组,包括:
确定每个所述第一类内存管理组对应的内存容量;
根据所述内存容量,创建对应的所述第一类内存管理组。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
设置一个第二类内存管理组,所述第二类内存管理组用于管理内存容量大于预设的内存容量阈值的内存。
5.根据权利要求1所述的方法,其特征在于,所述响应于接收到内存申请,确定所述内存申请对应的目标内存管理组,包括:
确定所述内存申请对应的内存容量值;
在所述多个第一类内存管理组中查找所述内存容量值对应的第一类内存管理组;
将所述第一类内存管理组作为所述目标内存管理组。
6.根据权利要求5所述的方法,其特征在于,所述在所述多个第一类内存管理组中查找所述内存容量值对应的第一类内存管理组,包括:
查找所述多个第一类内存管理组对应的分组索引信息;
根据所述分组索引信息,确定每个所述第一类内存管理组对应的内存容量值;
将所述内存容量值与每个所述第一类内存管理组对应的内存容量值进行对比,确定所述内存容量值对应的所述第一类内存管理组。
7.根据权利要求1所述的方法,其特征在于,所述从内存字节池中申请预设容量值的内存容量,包括:
将所述内存容量对应的内存容量申请发送至所述内存字节池;
接收所述内存字节池返回的所述内存容量。
8.根据权利要求1所述的方法,其特征在于,所述通过所述内存容量,对所述目标内存管理组进行内存补充,得到多个所述空闲内存块,包括:
将所述内存容量按照所述目标内存管理组对应的内存块容量进行划分,得到多个内存块;
将所述多个内存块加入所述目标内存管理组对应的空闲链表中,得到多个所述空闲内存块。
9.根据权利要求1所述的方法,其特征在于,所述将所述空闲内存块分配至所述内存申请对应的用户端,包括:
从所述目标内存管理组的空闲链表中取出所述空闲内存块;
将所述空闲内存块发送至所述用户端。
10.根据权利要求9所述的方法,其特征在于,在将所述空闲内存块发送至所述用户端之前,所述方法还包括:
将所述空闲内存块标记为已使用状态。
11.根据权利要求9所述的方法,其特征在于,所述方法还包括:
对所述空闲链表的地址进行更新,以使得所述空闲链表保存下一个空闲内存块的地址。
12.根据权利要求1所述的方法,其特征在于,所述方法还包括:
响应于在所述目标内存管理组中查找到所述空闲内存块,从所述目标内存管理组的空闲链表中取出所述空闲内存块;
将所述空闲内存块标记为已使用状态;
将所述空闲内存块发送至所述用户端。
13.根据权利要求12所述的方法,其特征在于,所述方法还包括:
对所述空闲链表的地址进行更新,以使得所述空闲链表保存下一个空闲内存块的地址。
14.根据权利要求1所述的方法,其特征在于,所述方法还包括:
响应于分配至所述用户端的所述空闲内存块进行内存释放,将所述空闲内存块标记为空闲状态。
15.根据权利要求14所述的方法,其特征在于,所述方法还包括:
对所述目标内存管理组的空闲链表的地址进行更新,以使得所述空闲链表保存所述空闲内存块的地址。
16.根据权利要求1所述的方法,其特征在于,所述方法还包括:
响应于所述内存申请对应的内存容量值大于预设的内存容量阈值,确定所述内存申请对应的内存管理组为第二类内存管理组;
根据所述内存容量值,确定所述内存容量值对应的申请内存容量值;
通过所述第二类内存管理组向所述内存字节池申请所述申请内存容量值对应的内存容量;
从所述第二类内存管理组对应的空闲链表中,将申请到的所述内存容量分配至所述用户端。
17.根据权利要求16所述的方法,其特征在于,所述从所述第二类内存管理组对应的空闲链表中,将申请到的内存容量分配至所述用户端,包括:
将所述内存容量从所述空闲链表中取出;
将所述内存容量标记为已使用状态;
将所述内存容量发送至所述用户端。
18.根据权利要求17所述的方法,其特征在于,所述方法还包括:
响应于所述用户端释放所述内存容量,将所述内存容量归还至所述内存字节池。
19.一种内存管理装置,其特征在于,所述装置包括:
内存管理组设置模块,用于设置多个第一类内存管理组,所述每个第一类内存管理组中包括多个相同容量的内存块,不同内存管理组包含的内存块的内存容量不同,每个所述第一类内存管理组管理对应内存容量的内存块;
内存管理组确定模块,用于响应于接收到内存申请,在所述多个第一类内存管理组中确定所述内存申请对应的目标内存管理组;
内存容量申请模块,用于响应于在所述目标内存管理组中未查找到空闲内存块,从内存字节池中申请预设容量值的内存容量;
空闲内存块获得模块,用于通过所述内存容量,对所述目标内存管理组进行内存补充,得到多个所述空闲内存块;
内存分配模块,用于将所述空闲内存块分配至所述内存申请对应的用户端;
第一内存容量归还模块,用于响应于所述目标内存管理组中最近一次申请的所述内存容量对应的内存块均为空闲内存块,对所述内存块进行内存释放,以使得所述内存容量归还至所述内存字节池。
20.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时,实现如权利要求1至18任一所述的方法中的步骤。
21.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时,实现如权利要求1至18任一所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311300873.XA CN117033002B (zh) | 2023-10-09 | 2023-10-09 | 一种内存管理方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311300873.XA CN117033002B (zh) | 2023-10-09 | 2023-10-09 | 一种内存管理方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117033002A CN117033002A (zh) | 2023-11-10 |
CN117033002B true CN117033002B (zh) | 2024-02-09 |
Family
ID=88637639
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311300873.XA Active CN117033002B (zh) | 2023-10-09 | 2023-10-09 | 一种内存管理方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117033002B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118069373A (zh) * | 2024-04-12 | 2024-05-24 | 北京象帝先计算技术有限公司 | 电子组件、电子设备及内存管理方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110016285A1 (en) * | 2009-07-16 | 2011-01-20 | Samsung Electronics Co., Ltd. | Apparatus and method for scratch pad memory management |
CN102915276A (zh) * | 2012-09-25 | 2013-02-06 | 武汉邮电科学研究院 | 一种用于嵌入式***的内存控制方法 |
WO2018063020A1 (en) * | 2016-09-28 | 2018-04-05 | Huawei Technologies Co., Ltd | Memory management method and device |
CN109388580A (zh) * | 2018-09-28 | 2019-02-26 | 深圳市景阳科技股份有限公司 | 一种内存管理方法、内存管理装置及终端设备 |
CN116089321A (zh) * | 2022-12-29 | 2023-05-09 | 浙江大华技术股份有限公司 | 内存管理方法、装置、电子装置和存储介质 |
-
2023
- 2023-10-09 CN CN202311300873.XA patent/CN117033002B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110016285A1 (en) * | 2009-07-16 | 2011-01-20 | Samsung Electronics Co., Ltd. | Apparatus and method for scratch pad memory management |
CN102915276A (zh) * | 2012-09-25 | 2013-02-06 | 武汉邮电科学研究院 | 一种用于嵌入式***的内存控制方法 |
WO2018063020A1 (en) * | 2016-09-28 | 2018-04-05 | Huawei Technologies Co., Ltd | Memory management method and device |
CN109388580A (zh) * | 2018-09-28 | 2019-02-26 | 深圳市景阳科技股份有限公司 | 一种内存管理方法、内存管理装置及终端设备 |
CN116089321A (zh) * | 2022-12-29 | 2023-05-09 | 浙江大华技术股份有限公司 | 内存管理方法、装置、电子装置和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN117033002A (zh) | 2023-11-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10922287B2 (en) | Intelligent layout of composite data structures in tiered storage | |
US6757802B2 (en) | Method for memory heap and buddy system management for service aware networks | |
CN109690498B (zh) | 内存管理方法和设备 | |
CN117033002B (zh) | 一种内存管理方法、装置、设备及存储介质 | |
CN109388590B (zh) | 提升多通道dma访问性能的动态缓存块管理方法和装置 | |
US11074179B2 (en) | Managing objects stored in memory | |
CN110555001B (zh) | 数据处理方法、装置、终端及介质 | |
US20190012258A1 (en) | Allocation of distributed data structures | |
WO2020199760A1 (zh) | 数据存储方法、存储器和服务器 | |
US10049035B1 (en) | Stream memory management unit (SMMU) | |
CN105718319B (zh) | 一种内存池版图解析方法和内存池装置 | |
CN112162938A (zh) | 大页内存分配方法及其计算机 | |
CN104503703A (zh) | 缓存的处理方法和装置 | |
US20190026325A1 (en) | Memory object pool use in a distributed index and query system | |
US20130061009A1 (en) | High Performance Free Buffer Allocation and Deallocation | |
CN114153785B (zh) | 基于远程直接内存访问的内存管理方法和设备 | |
WO2017086987A1 (en) | In-memory data shuffling | |
CN111666150B (zh) | 存储空间的分配方法、装置、终端及计算机可读存储介质 | |
CN111597392B (zh) | 一种索引处理方法、装置、设备及存储介质 | |
CN106021121B (zh) | 用以优化分组缓冲器空间的分组处理***、方法和设备 | |
US20180329756A1 (en) | Distributed processing system, distributed processing method, and storage medium | |
CN110825652B (zh) | 淘汰磁盘块上的缓存数据的方法、装置及设备 | |
US20190129843A1 (en) | Method and system for parallel mark processing | |
CN111104435A (zh) | 一种元数据组织方法、装置、设备及计算机可读存储介质 | |
US11630776B2 (en) | Methods and systems for fast allocation of fragmented caches |
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 |