CN115658561B - 配电终端内存管理方法、装置、电子设备及存储介质 - Google Patents
配电终端内存管理方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN115658561B CN115658561B CN202211430095.1A CN202211430095A CN115658561B CN 115658561 B CN115658561 B CN 115658561B CN 202211430095 A CN202211430095 A CN 202211430095A CN 115658561 B CN115658561 B CN 115658561B
- Authority
- CN
- China
- Prior art keywords
- memory
- memory block
- candidate
- block
- layer
- 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
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Memory System (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
本申请适用于内存管理分配技术领域,提供了一种配电终端内存管理方法、装置、电子设备及存储介质。该方法应用于电子设备上,该电子设备的内存空间包括具有层级关系的N层内存单元,第n层内存单元包括2n‑1个内存块,N为大于0的整数,n为[1,N]区间的整数;相邻两层的内存单元中,每个上层内存块包括不重复的两个下层内存块;该方法包括:获取指示待存储数据所申请内存的大小的内存申请请求;根据内存申请请求确定候选内存块;在候选内存块包括的所有下层内存块均空闲时,确定该候选内存块为目标内存块,并将待存储数据存储至目标内存块中。本申请能够减少内存的分配和管理中内存碎片的产生,提高内存的利用率。
Description
技术领域
本申请涉及内存管理分配技术领域,具体涉及一种配电终端内存管理方法、装置、电子设备及存储介质。
背景技术
在配电终端的裸机微控制单元(Microcontroller Unit;简称MCU)中,由于随机存取存储器(Random Access Memory,简称RAM)资源稀缺,为了在不增加成本的情况下实现更多功能,通常使用RAM的动态分配实现内存的分配和管理工作。
然而,RAM的动态分配通常是在堆中通过MALLOC等库函数进行对内存的分配和管理,这种方式由于其分配算法容易产生大量内存碎片,给本就紧张的RAM资源造成更大的压力,产生内存的浪费。因此,急需一种内存管理方法,以减少在内存的分配和管理中产生的内存碎片,提高内存的利用率。
发明内容
有鉴于此,本申请实施例提供了一种配电终端内存管理方法、装置、电子设备及存储介质,以解决现有方法中对内存的分配和管理易产生大量内存碎片、内存利用率低的技术问题。
第一方面,本申请实施例提供了一种配电终端内存管理方法,该方法应用于电子设备上,该电子设备的内存空间包括具有层级关系的N层内存单元,第n层内存单元包括2n-1个内存块,其中,N为大于0的整数,n为[1, N]区间的整数;相邻两层的内存单元中,每个上层内存块包括不重复的两个下层内存块,每层间内存块的大小不同,每层中内存块的大小相同;
该方法包括:获取内存申请请求,该内存申请请求指示待存储数据所申请内存的大小;根据内存申请请求从内存空间中的多个内存块中确定候选内存块;判断候选内存块包括的所有下层内存块是否空闲,若是,则确定候选内存块为目标内存块,并将待存储数据存储至目标内存块中。
在第一方面的一种可能的实施方式中,根据内存申请请求从内存空间中的多个内存块中确定候选内存块,包括:根据内存申请请求指示的所申请内存的大小确定候选内存块所在内存单元的层级;根据该层级的内存单元中的内存块的使用标志位确定候选内存块。
在第一方面的一种可能的实施方式中,根据该层级的内存单元中的内存块的使用标志位确定候选内存块,包括:判断该层级的内存单元中的第一个内存块的使用标志位是否置位;若否,则确定第一个内存块为候选内存块;若是,则判断第一个内存块的下一内存块的使用标志位是否置位,直至确定候选内存块。
在第一方面的一种可能的实施方式中,第n层内存单元中的内存块的使用标志位对应的预设置位值为N+1-n;判断候选内存块包括的所有下层内存块是否空闲,包括:利用内存空间对应的二叉树,从内存空间的第1层内存单元的第一个内存块开始,对内存空间中的内存块的使用标志位进行前序遍历;判断在前序遍历中,按前序遍历顺序,候选内存块之前的内存块的使用标志位的置位值是否小于或等于候选内存块所在内存单元对应的预设置位值,以及候选内存块包括的所有下层内存块的使用标志位是否置位;其中,二叉树包括N层,二叉树的根节点位于二叉树的第1层;二叉树的第n层包括2n-1个节点,二叉树的第n层中的2n-1个节点与内存空间的第n层内存单元中的2n-1个内存块一一对应。
在第一方面的一种可能的实施方式中,若候选内存块包括的所有下层内存块均空闲,则确定候选内存块为目标内存块,并将待存储数据存储至目标内存块中,包括:若候选内存块之前的内存块的使用标志位的置位值均小于或等于候选内存块所在内存单元对应的预设置位值,且候选内存块包括的所有下层内存块的使用标志位均未置位,则确定候选内存块为目标内存块,并将目标内存块的使用标志位置位为目标内存块所在内存单元对应的预设置位值;从目标内存块对应的内存地址加1的内存地址开始存储待存储数据。
在第一方面的一种可能的实施方式中,该配电终端内存管理方法还包括:若候选内存块包括的所有下层内存块中存在未空闲的内存块,则根据内存申请请求从内存空间中的多个内存块中确定新的候选内存块,并判断新的候选内存块包括的所有下层内存块是否空闲,直至确定新的目标内存块。
在第一方面的一种可能的实施方式中,该配电终端内存管理方法还包括:获取内存释放请求,内存释放请求指示待清除数据所占内存块的内存地址和所占内存块的使用标志位;根据内存释放请求指示的所占内存块的内存地址和所占内存块的使用标志位,对所占内存块进行释放,并将使用标志位清零。
第二方面,本申请实施例提供了一种配电终端内存管理装置,包括:
获取模块,用于获取内存申请请求,内存申请请求指示待存储数据所申请内存的大小;
确定模块,用于根据内存申请请求从内存空间中的多个内存块中确定候选内存块;
判断模块,用于判断候选内存块包括的所有下层内存块是否空闲,在候选内存块包括的所有下层内存块均空闲时,确定候选内存块为目标内存块,并将待存储数据存储至目标内存块中。
第三方面,本申请实施例提供了一种电子设备,包括存储器和处理器,存储器中存储有可在处理器上运行的计算机程序,处理器执行计算机程序时实现如第一方面任一项所述的配电终端内存管理方法。
第四方面,本申请实施例提供了一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,计算机程序被处理器执行时实现如第一方面任一项所述的配电终端内存管理方法。
第五方面,本申请实施例提供了一种计算机程序产品,当计算机程序产品在电子设备上运行时,使得电子设备执行上述第一方面中任一项所述的配电终端内存管理方法。
可以理解的是,上述第二方面至第五方面的有益效果可以参见上述第一方面中的相关描述,在此不再赘述。
本申请实施例提供的配电终端内存管理方法、装置、电子设备及存储介质,该配电终端内存管理方法应用于电子设备上,通过构建电子设备的内存空间中内存共享的具有层级关系的N层内存单元,第n层内存单元包括2n-1个内存块,其中,N为大于0的整数,n为[1,N]区间的整数,相邻两层的内存单元中,每个上层内存块包括不重复的两个下层内存块,并根据待存储数据的大小从内存空间中的多个内存块中确定候选内存块,在该候选内存块包括的所有下层内存块均空闲时确定该内存块为目标内存块,能够减少在内存的分配和管理中内存碎片的产生,提高内存的利用率,且内存空间的结构简单。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本说明书。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本申请一实施例提供的配电终端内存管理方法的流程示意图;
图2是本申请一实施例提供的内存空间中具有层级关系的内存单元与其内的内存块的示意图;
图3是本申请另一实施例提供的配电终端内存管理方法的流程示意图;
图4是本申请一实施例提供的内存空间对应的二叉树的结构示意图;
图5是本申请又一实施例提供的配电终端内存管理方法的流程示意图;
图6是本申请一实施例提供的配电终端内存管理装置的结构示意图;
图7是本申请一实施例提供的电子设备的结构示意图。
具体实施方式
下面结合具体实施例对本申请进行更清楚的说明。以下实施例将有助于本领域的技术人员进一步理解本申请的作用,但不以任何形式限制本申请。应当指出的是,对本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进。这些都属于本申请的保护范围。
应当理解,当在本申请说明书和所附权利要求书中使用时,术语“包括”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在本申请说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
在本申请说明书和所附权利要求书的描述中,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
在本申请说明书中描述的参考“一个实施例”或“一些实施例”等意味着在本申请的一个或多个实施例中包括结合该实施例描述的特定特征、结构或特点。由此,在本说明书中的不同之处出现的语句“在一个实施例中”、“在一些实施例中”、“在其他一些实施例中”、“在另外一些实施例中”等不是必然都参考相同的实施例,而是意味着“一个或多个但不是所有的实施例”,除非是以其他方式另外特别强调。术语“包括”、“包含”、“具有”及它们的变形都意味着“包括但不限于”,除非是以其他方式另外特别强调。
此外,本申请实施例中提到的“多个”应当被解释为两个或两个以上。
在配电终端的裸机微控制单元(Microcontroller Unit;简称MCU)中,由于随机存取存储器(Random Access Memory,简称RAM)资源稀缺,为了在不增加成本的情况下实现更多功能,通常使用RAM的动态分配实现内存的分配和管理工作。
然而,RAM的动态分配通常是在堆中通过MALLOC等库函数进行对内存的分配和管理,这种方式由于其分配算法容易产生大量内存碎片,给本就紧张的RAM资源造成更大的压力,产生内存的浪费。因此,急需一种内存管理方法,以减少在内存的分配和管理中产生的内存碎片,提高内存的利用率。
基于上述问题,本申请实施例提供了一种配电终端内存管理方法,应用于电子设备上,通过构建电子设备的内存空间中内存共享的具有层级关系的N层内存单元,第n层内存单元包括2n-1个内存块,其中,N为大于0的整数,n为[1, N]区间的整数,相邻两层的内存单元中,每个上层内存块包括不重复的两个下层内存块,并根据待存储数据的大小从内存空间中的多个内存块中确定候选内存块,在该候选内存块包括的所有下层内存块均空闲时确定该内存块为目标内存块,能够减少在内存的分配和管理中内存碎片的产生,提高内存的利用率,且内存空间的结构简单。
图1是本申请一实施例提供的配电终端内存管理方法的流程示意图。本申请实施例中的方法可以应用于电子设备上,上述电子设备的内存空间包括具有层级关系的N层内存单元,第n层内存单元包括2n-1个内存块,其中,N为大于0的整数,n为[1, N]区间的整数;相邻两层的内存单元中,每个上层内存块包括不重复的两个下层内存块,每层间内存块的大小不同,每层中内存块的大小相同。
可选的,内存空间中的具有层级关系的N层内存单元为内存共享的内存单元,需要注意的是,该层级关系并非物理上的层级关系。相同层内存单元中的内存块的大小相同,不同层内存单元中的内存块的大小不同,而相邻两层内存单元中,每个上层内存块包括不重复的两个下层内存块,即每个上层内存块由不重复的两个下层内存块构成,每个上层内存块的大小是每个下层内存块的2倍,也就是说,下层内存单元中的2M个大小相同的内存块能构成上层内存单元中的M个大小相同的内存块。
一个简单的示例是,内存空间中具有层级关系的内存单元与其内的内存块的示意图如图2所示。参见图2,令N=8,则内存空间中包括具有层级关系的8层内存单元。设最上层内存单元为第1层内存单元,最下层内存单元为第8层内存单元,第1层内存单元包括1个内存块,最下层内存单元包括28-1个内存块。设第8层内存单元中每个内存块的大小为8字节(B),每个内存块可以记为mem8,则第7层内存单元中的每个内存块的大小为16字节,每个内存块可以记为mem16,且该内存块由第8层内存单元中的不重复的两个内存块构成。依次类推,第6层内存单元中每个内存块的大小为32字节,每个内存块可以记为mem32,第2层内存单元中包括2个内存块,每个内存块的大小为512字节,每个内存块可以记为mem512,第1层内存单元中包括1个内存块,该内存块的大小为1024字节,且该内存块可以记为mem1024。
需要说明的是,在实际应用中,内存空间中层级N的取值和第N层内存单元中内存块的大小可以根据需要设置,在此不做具体限制。
如图1所示,该配电终端内存管理方法可以包括:
步骤101、获取内存申请请求。
其中,上述内存申请请求指示待存储数据所申请内存的大小。例如,待存储数据的大小为20字节,则内存申请请求指示所申请内存的大小为20字节。
步骤102、根据内存申请请求从内存空间中的多个内存块中确定候选内存块。
在一种可能的实施方式中,步骤102中,具体可以包括:
步骤1021、根据内存申请请求指示的所申请内存的大小确定候选内存块所在内存单元的层级。
可选的,由于不同层级内存单元中的内存块的大小不同,则根据所申请内存的大小可以确定候选内存块所在内存单元的层级。需要注意的是,由于每个内存块中的第一个字节对应的为使用标志位而非数据位,则每个内存块实际能存储数据的大小为该内存块的大小减一,设任一内存块的大小为X,则该内存块实际能存储数据的大小为X-1。
例如,所申请内存的大小为20字节,第7层内存单元中每个内存块的大小为16字节,第6层内存单元中每个内存块的大小为32字节,则确定候选内存块所在内存单元的层级为第6层。再例如,所申请内存的大小为32字节,第6层内存单元中每个内存块的大小为32字节,而实际第6层内存单元中每个内存块能存储数据的大小为31字节,第5层内存单元中每个内存块的大小为64字节,而实际第5层内存单元中每个内存块能存储数据的大小为63字节,则确定候选内存块所在内存单元的层级为第5层。
步骤1022、根据该层级的内存单元中的内存块的使用标志位确定候选内存块。
由前述实施例可知,每个内存块中的第一个字节对应的为使用标志位,内存块的使用标志位未置位,则表示该内存块可能未被占用,即可能可以存储数据。内存块的使用标志位置位,则表示该内存块当前被占用。
其中可选的,步骤1022中,具体可以包括:判断该层级的内存单元中的第一个内存块的使用标志位是否置位。若否,则确定第一个内存块为候选内存块;若是,则判断该第一个内存块的下一内存块的使用标志位是否置位,直至确定候选内存块。
示例性的,确定候选内存块所在内存单元的层级后,判断该层级的内存单元中的第一个内存块的使用标志位是否置位,若该第一个内存块的使用标志位未置位,则确定该第一个内存块为候选内存块;若该第一个内存块的使用标志位置位,则判断该层级的内存单元中的下一内存块的使用标志位是否置位,直至确定候选内存块。
步骤103、判断候选内存块包括的所有下层内存块是否空闲,若是,则确定候选内存块为目标内存块,并将待存储数据存储至目标内存块中。
在确定候选内存块后,由于内存空间中的内存单元为内存共享,可能存在该候选内存块已被占用,而其使用标志位被占用为数据位,导致其使用标志位显示为未置位的情况,因此此时还不能确定该候选内存块是否被占用,还需要对该候选内存块包括的所有下层内存块是否空闲进行确认。
在一种可能的实施方式中,参见图3,步骤103中,具体可以包括:
步骤1031、利用内存空间对应的二叉树,从内存空间的第1层内存单元的第一个内存块开始,对内存空间中的内存块的使用标志位进行前序遍历。
其中,上述二叉树包括N层,二叉树的根节点位于二叉树的第1层;二叉树的第n层包括2n-1个节点,二叉树的第n层中的2n-1个节点与内存空间的第n层内存单元中的2n-1个内存块一一对应。在内存空间构建具有层级关系的N层内存单元后,可以得到该内存空间对应的二叉树。
示例性的,内存空间对应的二叉树的结构示意图如图4所示,参见图4,令N=8,则内存空间中包括具有层级关系的8层内存单元,该内存空间对应的二叉树包括8层。二叉树的根节点位于二叉树的第1层,对应内存空间的第1层内存单元中的内存块mem1024,二叉树的第2层包括两个节点,分别对应内存空间的第2层内存单元中的2个内存块mem512,依次类推,二叉树的第7层包括27-1个节点,分别对应内存空间的第7层内存单元中的27-1个内存块mem16,二叉树的第8层包括28-1个节点,分别对应内存空间的第8层内存单元中的28-1个内存块mem8。
可选的,在确定候选内存块后,基于内存空间对应的二叉树,从内存空间的第1层内存单元的第一个内存块对应的二叉树的节点开始,即从二叉树的根节点开始进行前序遍历,也就是说,从内存空间的第1层内存单元的第一个内存块的使用标志位进行前序遍历,以判断候选内存块包括的所有下层内存块是否空闲。
步骤1032、判断在前序遍历中,按前序遍历顺序,候选内存块之前的内存块的使用标志位的置位值是否小于或等于候选内存块所在内存单元对应的预设置位值,以及候选内存块包括的所有下层内存块的使用标志位是否置位。
其中,第n层内存单元中的内存块的使用标志位对应的预设置位值为N+1-n,即预设置位值与内存单元的层级对应,也就是说,当第n层内存单元中的某一内存块被确定为目标内存块时,该目标内存块的使用标志位会置位为其所在层级内存单元对应的预设置位值,相应的,由于内存空间中的内存单元为内存共享,包含该目标内存块的所有上层内存块的使用标志位也为该预设置位值。
例如,第3层内存单元对应的预设置位值为6,当第3层内存单元的第一个内存块确定为目标内存块时,将该内存块的使用标志位置位为6,相应的,由于内存空间中的内存单元为内存共享,包括该内存块的上层内存块的使用标志位也为6,即第2层内存单元的第一个内存块和第1层内存单元的第一个内存块的使用标志位为6。
通过基于内存空间对应的二叉树,从内存空间的第1层内存单元的第一个内存块开始,对内存空间中的内存块的使用标志位进行前序遍历,可以准确快速判断候选内存块包括的所有下层内存块是否空闲。
步骤1033、若候选内存块之前的内存块的使用标志位的置位值均小于或等于候选内存块所在内存单元对应的预设置位值,且候选内存块包括的所有下层内存块的使用标志位均未置位,则确定候选内存块为目标内存块,并将目标内存块的使用标志位置位为目标内存块所在内存单元对应的预设置位值。
步骤1034、从目标内存块对应的内存地址加1的内存地址开始存储待存储数据。
需要说明的是,由前述可知,内存空间对应的二叉树的节点与内存空间的内存块一一对应,则候选内存块之前的内存块为内存空间对应的二叉树在前序遍历过程中,按前序遍历顺序该候选内存块对应的节点之前的节点对应的内存块,也就是按前序遍历顺序,该候选内存块之前的内存块。
示例性的,参见图4,若候选内存块为第8层内存单元中的第二个内存块,则该候选内存块对应二叉树的第8层的第二个节点,按前序遍历顺序,该节点之前的节点为二叉树的第1层的一个节点、第2层的第一个节点、第3层的第一个节点、…、和第8层的第一个节点,也就是说,该候选内存块之前的内存块为内存空间的第1层内存单元中的内存块mem1024、第2层内存单元中的第一个内存块mem512、第3层内存单元中的第一个内存块mem256、…、和第8层内存单元中的第一个内存块mem8。
可选的,若候选内存块之前的内存块的使用标志位的置位值均小于或等于候选内存块所在内存单元对应的预设置位值,且候选内存块包括的所有下层内存块的使用标志位均未置位,则确定该候选内存块包括的所有下层内存块均未被占用,即该候选内存块包括的所有下层内存块均空闲,此时确定该候选内存块为目标内存块,可以进行待存储数据的存储,同时将该目标内存块的使用标志位置位。由前述可知,第n层内存单元中的内存块的使用标志位对应的预设置位值为N+1-n,则将目标内存块的使用标志位置位的步骤具体可以为:将目标内存块的使用标志位置位为目标内存块所在内存单元对应的预设置位值。例如,确定第6层内存单元的第一个内存块为目标内存块,则将该内存块的使用标志位置位为3。
示例性的,内存块中的每个字节对应一个内存地址,且内存空间中所有字节对应的内存地址连续。每个内存块对应该内存块中第一个字节对应的内存地址,例如,第8层内存单元中的第一个内存块记为mem8[0],该内存块mem8[0]中每个字节对应的内存地址依次为0,1,…,7,则该内存块mem8对应的内存地址为0;第8层内存单元中的第二个内存块记为mem8[1],该内存块mem8[1]中每个字节对应的内存地址依次为8,9,…,15,则该内存块mem8[1]对应的内存地址为8。
由前述可知,由于内存块中的第一个字节为使用标志位而非数据位,则在确定目标内存块后,从该目标内存块对应的内存地址加1的内存地址开始存储待存储数据。
在另一种可能的实施方式中,本申请实施例提供的配电终端内存管理方法还包括:若候选内存块包括的所有下层内存块中存在未空闲的内存块,则根据内存申请请求从内存空间中的多个内存块中确定新的候选内存块,并判断新的候选内存块包括的所有下层内存块是否空闲,直至确定新的目标内存块。
可选的,在前序遍历过程中,按前序遍历顺序,若候选内存块之前的内存块中任意内存块的使用标志位的置位值大于候选内存块所在内存单元对应的预设置位值,或,候选内存块包括的下层内存块中任意内存块的使用标志位置位,则确定候选内存块包括的下层内存块中存在未空闲的内存块,表明该候选内存块被占用,此时停止前序遍历,判断该候选内存块所在内存单元中,该候选内存块的下一内存块的使用标志位是否置位,直至确定新的候选内存块,并判断新的候选内存块包括的所有下层内存块是否空闲,直至确定新的目标内存块,即重复步骤102~103。
在一种可能的实施方式中,当需要清除已存储数据时,还需要对相应内存块进行释放,参见图5,本申请实施例提供的配电终端内存管理方法,还可以包括:
步骤104、获取内存释放请求。
步骤105、根据内存释放请求指示的所占内存块的内存地址和所占内存块的使用标志位,对所占内存块进行释放,并将使用标志位清零。
其中,内存释放请求指示待清除数据所占内存块的内存地址和所占内存块的使用标志位的置位值。
可选的,根据所占内存块的内存地址和该所占内存块的使用标志位的置位值确定待释放内存的大小,例如,内存释放请求指示所占内存块的内存地址为0且该所占内存块的使用标志位的置位值为3,该置位值3与第6层内存单元相对应,而第6层内存单元中每个内存块的大小为32字节,则从该内存地址0开始,进行32字节的内存的释放,并将该使用标志位清零。
在一些实施例中,定义具有层级关系的N层内存单元为子内存空间,可选的,在内存空间中可以包括多个相同的子内存空间。
本申请实施例提供的一种配电终端内存管理方法,应用于电子设备上,通过构建电子设备的内存空间中内存共享的具有层级关系的N层内存单元,第n层内存单元包括2n-1个内存块,其中,N为大于0的整数,n为[1, N]区间的整数,相邻两层的内存单元中,每个上层内存块包括不重复的两个下层内存块,并根据待存储数据的大小从内存空间中的多个内存块中确定候选内存块,在该候选内存块包括的所有下层内存块均空闲时确定该内存块为目标内存块,能够减少在内存的分配和管理中内存碎片的产生,提高内存的利用率,且内存空间的结构简单。
应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
图6是本申请一实施例提供的配电终端内存管理装置的结构示意图。如图6所示,本实施例提供的配电终端内存管理装置,可以包括:获取模块201、确定模块202和判断模块203。
其中,获取模块201,用于获取内存申请请求,内存申请请求指示待存储数据所申请内存的大小。
确定模块202,用于根据内存申请请求从内存空间中的多个内存块中确定候选内存块。
判断模块203,用于判断候选内存块包括的所有下层内存块是否空闲,在候选内存块包括的所有下层内存块空闲时,确定候选内存块为目标内存块,并将待存储数据存储至目标内存块中。
可选的,确定模块202具体用于根据内存申请请求指示的所申请内存的大小确定候选内存块所在内存单元的层级;根据该层级的内存单元中的内存块的使用标志位确定候选内存块。
可选的,确定模块202还具体用于判断该层级的内存单元中的第一个内存块的使用标志位是否置位;若否,则确定第一个内存块为候选内存块;若是,则判断第一个内存块的下一内存块的使用标志位是否置位,直至确定候选内存块。
可选的,第n层内存单元中的内存块的使用标志位对应的预设置位值为N+1-n;判断模块203具体用于利用内存空间对应的二叉树,从内存空间的第1层内存单元的第一个内存块开始,对内存空间中的内存块的使用标志位进行前序遍历;判断在前序遍历中,按前序遍历顺序,候选内存块之前的内存块的使用标志位的置位值是否小于或等于候选内存块所在内存单元对应的预设置位值,以及候选内存块包括的所有下层内存块的使用标志位是否置位;其中,二叉树包括N层,二叉树的根节点位于二叉树的第1层;二叉树的第n层包括2n-1个节点,二叉树的第n层中的2n-1个节点与内存空间的第n层内存单元中的2n-1个内存块一一对应。
可选的,判断模块203还具体用于在候选内存块之前的内存块的使用标志位的置位值均小于或等于候选内存块所在内存单元对应的预设置位值,且候选内存块包括的所有下层内存块的使用标志位均未置位时,确定候选内存块为目标内存块,并将目标内存块的使用标志位置位为目标内存块所在内存单元对应的预设置位值;从目标内存块对应的内存地址加1的内存地址开始存储待存储数据。
可选的,判断模块203还具体用于在候选内存块包括的所有下层内存块中存在未空闲的内存块时,根据内存申请请求从内存空间中的多个内存块中确定新的候选内存块,并判断新的候选内存块包括的所有下层内存块是否空闲,直至确定新的目标内存块。
可选的,判断模块203还用于获取内存释放请求,内存释放请求指示待清除数据所占内存块的内存地址和所占内存块的使用标志位;根据内存释放请求指示的所占内存块的内存地址和和所占内存块的使用标志位,对所占内存块进行释放,并将使用标志位清零。
需要说明的是,上述装置/单元之间的信息交互、执行过程等内容,由于与本申请方法实施例基于同一构思,其具体功能及带来的技术效果,具体可参见方法实施例部分,此处不再赘述。
图7是本申请一实施例提供的电子设备的结构示意图。如图7所示,该实施例的电子设备300包括:处理器310、存储器320,上述存储器320中存储有可在处理器310上运行的计算机程序321。处理器310执行计算机程序321时实现上述任意各个方法实施例中的步骤,例如图1所示的步骤101至103。或者,处理器310执行计算机程序321时实现上述各装置实施例中各模块/单元的功能,例如图6所示模块201至203的功能。
示例性的,计算机程序321可以被分割成一个或多个模块/单元,一个或者多个模块/单元被存储在存储器320中,并由处理器310执行,以完成本申请。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述计算机程序321在电子设备300中的执行过程。
本领域技术人员可以理解,图7仅仅是电子设备的示例,并不构成对电子设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如输入输出设备、网络接入设备、总线等。
处理器310可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器 (Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列 (Field-Programmable Gate Array,FPGA) 或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
存储器320可以是电子设备的内部存储单元,例如电子设备的硬盘或内存,也可以是电子设备的外部存储设备,例如电子设备上配备的插接式硬盘,智能存储卡(SmartMedia Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。上述存储器320还可以既包括电子设备的内部存储单元也包括外部存储设备。上述存储器320用于存储计算机程序以及电子设备所需的其他程序和数据。存储器320还可以用于暂时地存储已经输出或者将要输出的数据。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
在本发明所提供的实施例中,应该理解到,所揭露的装置/电子设备和方法,可以通过其它的方式实现。例如,以上所描述的装置/电子设备实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。
所述集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。
以上所述实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。
Claims (9)
1. 一种配电终端内存管理方法,其特征在于,应用于电子设备上,所述电子设备的内存空间包括具有层级关系的N层内存单元,第n层内存单元包括个内存块,其中,N为大于0的整数,n为[1, N]区间的整数;相邻两层的内存单元中,每个上层内存块包括不重复的两个下层内存块,每层间内存块的大小不同,每层中内存块的大小相同;
所述方法包括:
获取内存申请请求,所述内存申请请求指示待存储数据所申请内存的大小;
根据所述内存申请请求从所述内存空间中的多个内存块中确定候选内存块;
判断所述候选内存块包括的所有下层内存块是否空闲,若是,则确定所述候选内存块为目标内存块,并将所述待存储数据存储至所述目标内存块中;
其中,第n层内存单元中的内存块的使用标志位对应的预设置位值为N+1-n;
所述判断所述候选内存块包括的所有下层内存块是否空闲,包括:
利用所述内存空间对应的二叉树,从所述内存空间的第1层内存单元的第一个内存块开始,对所述内存空间中的内存块的使用标志位进行前序遍历;
判断在所述前序遍历中,按前序遍历顺序,所述候选内存块之前的内存块的使用标志位的置位值是否小于或等于所述候选内存块所在内存单元对应的预设置位值,以及所述候选内存块包括的所有下层内存块的使用标志位是否置位;
2.根据权利要求1所述的配电终端内存管理方法,其特征在于,所述根据所述内存申请请求从所述内存空间中的多个内存块中确定候选内存块,包括:
根据所述内存申请请求指示的所申请内存的大小确定所述候选内存块所在内存单元的层级;
根据所述层级的内存单元中的内存块的使用标志位确定候选内存块。
3.根据权利要求2所述的配电终端内存管理方法,其特征在于,所述根据所述层级的内存单元中的内存块的使用标志位确定候选内存块,包括:
判断所述层级的内存单元中的第一个内存块的使用标志位是否置位;
若否,则确定所述第一个内存块为候选内存块;
若是,则判断所述第一个内存块的下一内存块的使用标志位是否置位,直至确定候选内存块。
4.根据权利要求1所述的配电终端内存管理方法,其特征在于,若所述候选内存块包括的所有下层内存块均空闲,则确定所述候选内存块为目标内存块,并将所述待存储数据存储至所述目标内存块中,包括:
若所述候选内存块之前的内存块的使用标志位的置位值均小于或等于所述候选内存块所在内存单元对应的预设置位值,且所述候选内存块包括的所有下层内存块的使用标志位均未置位,则确定所述候选内存块为目标内存块,并将所述目标内存块的使用标志位置位为所述目标内存块所在内存单元对应的预设置位值;
从所述目标内存块对应的内存地址加1的内存地址开始存储所述待存储数据。
5.根据权利要求1所述的配电终端内存管理方法,其特征在于,所述方法还包括:
若所述候选内存块包括的所有下层内存块中存在未空闲的内存块,则根据所述内存申请请求从内存空间中的多个内存块中确定新的候选内存块,并判断所述新的候选内存块包括的所有下层内存块是否空闲,直至确定新的目标内存块。
6.根据权利要求1至5任一项所述的配电终端内存管理方法,其特征在于,所述方法还包括:
获取内存释放请求,所述内存释放请求指示待清除数据所占内存块的内存地址和所占内存块的使用标志位;
根据所述内存释放请求指示的所占内存块的内存地址和所占内存块的使用标志位,对所述所占内存块进行释放,并将所述使用标志位清零。
7.一种配电终端内存管理装置,其特征在于,包括:
获取模块,用于获取内存申请请求,所述内存申请请求指示待存储数据所申请内存的大小;
确定模块,用于根据所述内存申请请求从内存空间中的多个内存块中确定候选内存块;
判断模块,用于判断所述候选内存块包括的所有下层内存块是否空闲,在所述候选内存块包括的所有下层内存块均空闲时,确定所述候选内存块为目标内存块,并将所述待存储数据存储至所述目标内存块中;
其中,第n层内存单元中的内存块的使用标志位对应的预设置位值为N+1-n;
所述判断模块具体用于利用所述内存空间对应的二叉树,从所述内存空间的第1层内存单元的第一个内存块开始,对所述内存空间中的内存块的使用标志位进行前序遍历;判断在所述前序遍历中,按前序遍历顺序,所述候选内存块之前的内存块的使用标志位的置位值是否小于或等于所述候选内存块所在内存单元对应的预设置位值,以及所述候选内存块包括的所有下层内存块的使用标志位是否置位;
8.一种电子设备,包括存储器和处理器,所述存储器中存储有可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至6任一项所述的配电终端内存管理方法。
9.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至6任一项所述的配电终端内存管理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211430095.1A CN115658561B (zh) | 2022-11-16 | 2022-11-16 | 配电终端内存管理方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211430095.1A CN115658561B (zh) | 2022-11-16 | 2022-11-16 | 配电终端内存管理方法、装置、电子设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115658561A CN115658561A (zh) | 2023-01-31 |
CN115658561B true CN115658561B (zh) | 2023-03-14 |
Family
ID=85020423
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211430095.1A Active CN115658561B (zh) | 2022-11-16 | 2022-11-16 | 配电终端内存管理方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115658561B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116627359B (zh) * | 2023-07-24 | 2023-11-14 | 成都佰维存储科技有限公司 | 内存管理方法、装置、可读存储介质及电子设备 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105302738B (zh) * | 2015-12-09 | 2018-09-11 | 北京东土科技股份有限公司 | 一种内存分配方法及装置 |
CN107844372B (zh) * | 2017-10-17 | 2021-09-07 | 广东睿江云计算股份有限公司 | 一种内存分配的方法、系统 |
CN111078410B (zh) * | 2019-12-11 | 2022-11-04 | Oppo(重庆)智能科技有限公司 | 内存分配方法、装置、存储介质及电子设备 |
CN111338981B (zh) * | 2020-02-21 | 2022-11-08 | 深圳震有科技股份有限公司 | 一种内存防碎片方法、系统及储存介质 |
CN112328389B (zh) * | 2020-10-12 | 2024-04-30 | 长沙新弘软件有限公司 | 一种用于二叉树添加和删除结点的内存分配方法 |
CN113742058A (zh) * | 2021-02-10 | 2021-12-03 | 北京沃东天骏信息技术有限公司 | 管理堆外内存的方法和装置 |
CN113590332B (zh) * | 2021-08-05 | 2023-10-13 | 上海金仕达软件科技股份有限公司 | 内存管理方法、装置及内存分配器 |
-
2022
- 2022-11-16 CN CN202211430095.1A patent/CN115658561B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN115658561A (zh) | 2023-01-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7908454B2 (en) | Application-specific heap management | |
CN112214313B (zh) | 内存分配方法及相关设备 | |
CA2556083A1 (en) | Memory allocation | |
CN111597040B (zh) | 一种资源分配方法、装置、存储介质和电子设备 | |
CN107783812B (zh) | 虚拟机内存管理方法及装置 | |
CN109753361B (zh) | 一种内存管理方法、电子设备及存储装置 | |
CN115658561B (zh) | 配电终端内存管理方法、装置、电子设备及存储介质 | |
CN107894922B (zh) | Ram资源分配方法 | |
CN112269665B (zh) | 内存的处理方法和装置、电子设备和存储介质 | |
CN114327917A (zh) | 内存管理方法、计算设备及可读存储介质 | |
CN113032156B (zh) | 内存分配方法和装置、电子设备和存储介质 | |
CN111209257A (zh) | 一种文件系统碎片化的方法及装置 | |
CN110674052A (zh) | 内存管理方法、服务器及可读存储介质 | |
CN112650577A (zh) | 内存管理方法和装置 | |
CN114296658A (zh) | 一种存储空间分配方法、装置、终端设备及存储介质 | |
US9619151B2 (en) | Region management apparatus, region management method, and program | |
CN113849311B (zh) | 内存空间管理方法、装置、计算机设备和存储介质 | |
CN107656697B (zh) | 一种在存储介质上操作数据的方法和装置 | |
CN113778688B (zh) | 内存管理系统、内存管理方法、内存管理装置 | |
CN112346848A (zh) | 一种管理内存池的方法、装置及终端 | |
CN111881066B (zh) | 一种pl反向元数据的存储方法、系统、设备及存储介质 | |
CN105659216A (zh) | 多核处理器系统的缓存目录处理方法和目录控制器 | |
CN110209489B (zh) | 一种适用于内存页结构的内存管理方法及装置 | |
CN113553195A (zh) | 一种内存池资源共用的方法、装置、设备及可读介质 | |
CN112817526A (zh) | 一种数据存储方法、装置及介质 |
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 |