CN107209716A - 内存管理装置和方法 - Google Patents
内存管理装置和方法 Download PDFInfo
- Publication number
- CN107209716A CN107209716A CN201580075454.8A CN201580075454A CN107209716A CN 107209716 A CN107209716 A CN 107209716A CN 201580075454 A CN201580075454 A CN 201580075454A CN 107209716 A CN107209716 A CN 107209716A
- Authority
- CN
- China
- Prior art keywords
- length
- memory block
- memory
- shared drive
- drive pond
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System (AREA)
Abstract
一种内存管理装置和方法,涉及信息技术领域,所述方法包括:获取预定大小的待分配内存(S502);根据待分配内存创建共享内存池,该共享内存池中包括将待分配内存划分得到的n个长度为预定长度的内存块,该共享内存池用于提供至少两种不同长度的内存块的内存申请服务(S504);获取内存申请所对应的需求长度(S506);从共享内存池中获取一个长度为需求长度的内存块进行分配使用(S508)。该技术方案解决了相关技术存在的内存浪费严重,内存的总利用率低的问题;通过不同长度的内存块共用一个共享内存池,既可以保证在内存分配时应对不同长度内存块的峰值需求,又可以达到节约内存、提高内存的总利用率的效果。
Description
本发明涉及信息技术领域,特别涉及一种内存管理装置和方法。
缓冲器管理单元(英文:Buffer Management Unit;简称:BMU)是一个设置于处理器内部、用于对内存进行管理的硬件装置。
BMU管理内存的方法为:BMU首先获取预定大小的待分配内存,然后根据上述待分配内存创建多个内存池,同一内存池中包含若干个长度相等的内存块。其中,内存池的创建数量,以及各个内存池中内存块的长度均可根据实际需求进行配置。比如,假设BMU创建了3个内存池,分别为内存池1、内存池2和内存池3。其中,内存池1中包含N1个长度为L1字节的内存块,内存池2中包含N2个长度为L2字节的内存块,内存池3中包含N3个长度为L3字节的内存块,L1、L2和L3两两均不相等。之后,BMU根据内存申请和释放的需要,对各个内存池中的内存块进行管理。比如,当内存申请所对应的需求长度为L2字节时,BMU检测内存池2中是否存在空闲的内存块;若存在,则从内存池2中选取一个空闲的内存块进行分配使用;若不存在,则内存申请失败。
在实现本发明的过程中,发明人发现上述技术至少存在以下问题:为了保证内存分配的可靠性,应对不同长度内存块的使用峰值,BMU需要分别给各个内存池配置满足使用峰值需求的内存块数量。然而,在实际使用中,多个内存池并不会同时达到使用峰值。比如,当内存池1达到使用峰值时,内存池2和内存池3未达到使用峰值;当内存池3达到使用峰值时,内存池1和内存池2未达到使用峰值。因此,上述技术存在内存浪费严重,内存的总利用率低的问题。
发明内容
为了解决上述技术存在的内存浪费严重,内存的总利用率低的问题,本发
明实施例提供了一种内存管理装置和方法。所述技术方案如下:
第一方面,提供了一种内存管理装置,所述装置包括:
第一获取单元,用于获取预定大小的待分配内存;
创建单元,用于根据所述待分配内存创建共享内存池,所述共享内存池中包括将所述待分配内存划分得到的n个长度为预定长度的内存块,所述共享内存池用于提供至少两种不同长度的内存块的内存申请服务,所述至少两种不同长度中的每一种长度小于或等于所述预定长度,n≥2且n为正整数;
第二获取单元,用于获取内存申请所对应的需求长度,所述需求长度是所述至少两种不同长度中的一种;
分配单元,用于从所述共享内存池中获取一个长度为所述需求长度的内存块进行分配使用。
在第一方面的第一种可能的实施方式中,所述分配单元,具体用于:
检测所述共享内存池中是否存在空闲的且长度为所述需求长度的第一内存块;
若所述共享内存池中存在所述第一内存块,则将所述第一内存块进行分配使用。
结合第一方面的第一种可能的实施方式,在第一方面的第二种可能的实施方式中,所述分配单元,具体还用于:
若所述共享内存池中不存在所述第一内存块,则从所述共享内存池中选取空闲的且长度大于所述需求长度的第二内存块;
将所述第二内存块划分为m个内存块,所述m个内存块中包含长度为所述需求长度的内存块,m≥2且m为整数;
从所述m个内存块中选取所述长度为所述需求长度的内存块进行分配使用。
结合第一方面的第二种可能的实施方式,在第一方面的第三种可能的实施方式中,所述分配单元,具体还用于:
当所述共享内存池中存在至少两种不同长度的所述第二内存块时,从所述共享内存池中选取空闲的、长度大于且最接近于所述需求长度的第二内存块。
结合第一方面、第一方面的第一种可能的实施方式、第一方面的第二种可能的实施方式或者第一方面的第三种可能的实施方式,在第一方面的第四种可能的实施方式中,所述装置还包括:
第三获取单元,用于获取需要释放的内存块对应的内存地址和长度;
检测单元,用于当所述需要释放的内存块的长度小于所述预定长度时,根据所述内存地址检测所述需要释放的内存块所属的目标内存块中的其它内存块是否空闲,所述目标内存块的长度是所述至少两种不同长度中的一种且所述目标内存块的长度大于且最接近于所述需要释放的内存块的长度;
合并单元,用于当所述其它内存块空闲时,将所述需要释放的内存块和所述其它内存块合并为所述目标内存块,所述目标内存块的长度是所述至少两种不同长度中的一种。
结合第一方面、第一方面的第一种可能的实施方式、第一方面的第二种可能的实施方式、第一方面的第三种可能的实施方式或者第一方面的第四种可能的实施方式,在第一方面的第五种可能的实施方式中,所述至少两种不同长度的内存块包括w级不同长度的内存块,且第i+1级内存块的长度是第i级内存块的长度的q倍,第w级内存块的长度为所述预定长度,w≥2,1≤i≤w-1,q≥2且w、i、q均为整数。
第二方面,提供了一种内存管理装置,所述装置包括:控制器和寄存器;
所述寄存器用于存储一个或者一个以上的指令,所述指令用于实现一种内存管理方法;
所述方法包括:
获取预定大小的待分配内存;
根据所述待分配内存创建共享内存池,所述共享内存池中包括将所述待分配内存划分得到的n个长度为预定长度的内存块,所述共享内存池用于提供至少两种不同长度的内存块的内存申请服务,所述至少两种不同长度中的每一种长度小于或等于所述预定长度,n≥2且n为正整数;
获取内存申请所对应的需求长度,所述需求长度是所述至少两种不同长度中的一种;
从所述共享内存池中获取一个长度为所述需求长度的内存块进行分配使用;
所述控制器用于执行所述指令。
在第二方面的第一种可能的实施方式中,所述寄存器还存储有用于执行以下操作的指令:
检测所述共享内存池中是否存在空闲的且长度为所述需求长度的第一内存块;
若所述共享内存池中存在所述第一内存块,则将所述第一内存块进行分配使用;
所述控制器还用于执行所述指令。
结合第二方面的第一种可能的实施方式,在第二方面的第二种可能的实施方式中,所述寄存器还存储有用于执行以下操作的指令:
当所述共享内存池中不存在所述第一内存块时,从所述共享内存池中选取空闲的且长度大于所述需求长度的第二内存块;
将所述第二内存块划分为m个内存块,所述m个内存块中包含长度为所述需求长度的内存块,m≥2且m为整数;
从所述m个内存块中选取所述长度为所述需求长度的内存块进行分配使用;
所述控制器还用于执行所述指令。
结合第二方面的第二种可能的实施方式,在第二方面的第三种可能的实施方式中,所述寄存器还存储有用于执行以下操作的指令:
当所述共享内存池中存在至少两种不同长度的所述第二内存块时,从所述共享内存池中选取空闲的、长度大于且最接近于所述需求长度的第二内存块;
所述控制器还用于执行所述指令。
结合第二方面、第二方面的第一种可能的实施方式、第二方面的第二种可能的实施方式或者第二方面的第三种可能的实施方式,在第二方面的第四种可能的实施方式中,所述寄存器还存储有用于执行以下操作的指令:
获取需要释放的内存块对应的内存地址和长度;
当所述需要释放的内存块的长度小于所述预定长度时,根据所述内存地址检测所述需要释放的内存块所属的目标内存块中的其它内存块是否空闲,所述目标内存块的长度是所述至少两种不同长度中的一种且所述目标内存块的长度大于且最接近于所述需要释放的内存块的长度;
若所述其它内存块空闲,则将所述需要释放的内存块和所述其它内存块合并为所述目标内存块,所述目标内存块的长度是所述至少两种不同长度中的一种;
所述控制器还用于执行所述指令。
结合第二方面、第二方面的第一种可能的实施方式、第二方面的第二种可能的实施方式、第二方面的第三种可能的实施方式或者第二方面的第四种可能的实施方式,在第二方面的第五种可能的实施方式中,所述至少两种不同长度的内存块包括w级不同长度的内存块,且第i+1级内存块的长度是第i级内存块的长度的q倍,第w级内存块的长度为所述预定长度,w≥2,1≤i≤w-1,q≥2且w、i、q均为整数。
第三方面,提供了一种内存管理方法,所述方法包括:
获取预定大小的待分配内存;
根据所述待分配内存创建共享内存池,所述共享内存池中包括将所述待分配内存划分得到的n个长度为预定长度的内存块,所述共享内存池用于提供至少两种不同长度的内存块的内存申请服务,所述至少两种不同长度中的每一种长度小于或等于所述预定长度,n≥2且n为正整数;
获取内存申请所对应的需求长度,所述需求长度是所述至少两种不同长度中的一种;
从所述共享内存池中获取一个长度为所述需求长度的内存块进行分配使用。
在第三方面的第一种可能的实施方式中,所述从所述共享内存池中获取一个长度为所述需求长度的内存块进行分配使用,包括:
检测所述共享内存池中是否存在空闲的且长度为所述需求长度的第一内存块;
若所述共享内存池中存在所述第一内存块,则将所述第一内存块进行分配使用。
结合第三方面的第一种可能的实施方式,在第三方面的第二种可能的实施方式中,所述检测所述共享内存池中是否存在空闲的且长度为所述需求长度的第一内存块之后,还包括:
若所述共享内存池中不存在所述第一内存块,则从所述共享内存池中选取空闲的且长度大于所述需求长度的第二内存块;
将所述第二内存块划分为m个内存块,所述m个内存块中包含长度为所述需求长度的内存块,m≥2且m为整数;
从所述m个内存块中选取所述长度为所述需求长度的内存块进行分配使
用。
结合第三方面的第二种可能的实施方式,在第三方面的第三种可能的实施方式中,所述从所述共享内存池中选取空闲的且长度大于所述需求长度的第二内存块,包括:
当所述共享内存池中存在至少两种不同长度的所述第二内存块时,从所述共享内存池中选取空闲的、长度大于且最接近于所述需求长度的第二内存块。
结合第三方面、第三方面的第一种可能的实施方式、第三方面的第二种可能的实施方式或者第三方面的第三种可能的实施方式,在第三方面的第四种可能的实施方式中,所述方法还包括:
获取需要释放的内存块对应的内存地址和长度;
当所述需要释放的内存块的长度小于所述预定长度时,根据所述内存地址检测所述需要释放的内存块所属的目标内存块中的其它内存块是否空闲,所述目标内存块的长度是所述至少两种不同长度中的一种且所述目标内存块的长度大于且最接近于所述需要释放的内存块的长度;
若所述其它内存块空闲,则将所述需要释放的内存块和所述其它内存块合并为所述目标内存块,所述目标内存块的长度是所述至少两种不同长度中的一种。
结合第三方面、第三方面的第一种可能的实施方式、第三方面的第二种可能的实施方式、第三方面的第三种可能的实施方式或者第三方面的第四种可能的实施方式,在第三方面的第五种可能的实施方式中,所述至少两种不同长度的内存块包括w级不同长度的内存块,且第i+1级内存块的长度是第i级内存块的长度的q倍,第w级内存块的长度为所述预定长度,w≥2,1≤i≤w-1,q≥2且w、i、q均为整数。
本发明实施例提供的技术方案的有益效果包括:
通过创建共享内存池,由该共享内存池提供至少两种不同长度的内存块的申请服务,并在获取内存申请所对应的需求长度时,从共享内存池中获取一个长度为需求长度的内存块进行分配使用;解决了相关技术存在的内存浪费严重,内存的总利用率低的问题;通过不同长度的内存块共用一个共享内存池,既可以保证在内存分配时应对不同长度内存块的峰值需求,又可以达到节约内存、提高内存的总利用率的效果。
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明各个实施例所涉及的一种实施环境的示意图;
图2是本发明一个实施例提供的内存管理装置的结构方框图;
图3是本发明另一实施例提供的内存管理装置的结构方框图;
图4是本发明再一实施例提供的内存管理装置的结构示意图;
图5是本发明一个实施例提供的内存管理方法的方法流程图;
图6A是本发明另一实施例提供的内存管理方法的方法流程图;
图6B是采用背景技术提供的内存管理方法所创建的内存池的示意图;
图6C是采用本发明实施例提供的内存管理方法所创建的内存池的示意图;
图6D是本发明另一实施例提供的内存管理方法中步骤604所涉及的流程图;
图6E是采用本发明实施例提供的内存管理方法所涉及的内存分配的示意图;
图7A/图7B是本发明再一实施例提供的内存管理方法的方法流程图;
图8是本发明还一实施例提供的内存管理方法的方法流程图。
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
请参考图1,其示出了本发明各个实施例所涉及的一种实施环境的示意图,该实施环境包括:处理器(英文:Central Processing Unit;简称:CPU)10和存储器20,处理器10与存储器20之间可通过总线相连。其中:
处理器10可以是单核处理器,也可以是多核处理器。处理器10内部设置有内存管理装置11,该内存管理装置11是用于对内存进行管理的硬件装置,如BMU。如图1所示,内存管理装置11中包括控制器11a和寄存器11b。控
制器11a与寄存器11b之间电性相连。寄存器11b中存储有一个或者一个以上用于对内存进行管理的指令,该指令被配置成由控制器11a执行,以实现对内存进行管理。
可选的,如图1所示,处理器10内部还可设置有高速缓冲存储器Cache12。Cache12用于存储从存储器20调入的存储单元,以满足处理器10对数据进行高速存取的需求。
首先需要说明的一点是:本发明实施例提供的技术方案所采用的内存管理方式为块内存管理方式。块内存管理方式是指内存初始化时将内存划分为若干个内存块,后续内存申请和内存释放的粒度为一个内存块的内存管理方式。采用块内存管理方式,可防止因内存的反复申请和释放而产生大量内存碎片的问题,同时提高内存分配效率。
还需要说明的一点是:正是由于块内存管理方式所具有的上述优势,本发明实施例提供的内存管理装置主要应用于对数据具有高速存取需求的设备中,如基站设备、路由器、交换机等。以基站设备为例,在不同的通信***中,基站设备可以是基站收发信台(英文:Base Transmitter Station,简称:BTS)、基站(英文:Node Base station,简称:Node B)、演进型基站(英文:Evolved Node Base station,简称:eNB)等。当然,在其它可能的应用场景中,本发明实施例提供的内存管理装置也可应用于任何具有数据存取需求的电子设备中,该电子设备包括但不限于终端设备、服务器、传输设备等,对此本发明实施例不作限定。
下面,对本发明实施例提供的技术方案进行介绍和说明。
请参考图2,其示出了本发明一个实施例提供的内存管理装置的结构方框图。该内存管理装置可通过软件、硬件或者两者的结合实现。该内存管理装置可设置于处理器内部,用于对内存进行管理。该内存管理装置可以包括:第一获取单元210、创建单元220、第二获取单元230和分配单元240。
第一获取单元210,用于获取预定大小的待分配内存。
创建单元220,用于根据第一获取单元210获取的待分配内存创建共享内存池。
其中,共享内存池中包括将待分配内存划分得到的n个长度为预定长度的内存块,共享内存池用于提供至少两种不同长度的内存块的内存申请服务,该
至少两种不同长度中的每一种长度小于或等于上述预定长度,n≥2且n为正整数。
第二获取单元230,用于获取内存申请所对应的需求长度,该需求长度是上述至少两种不同长度中的一种。
分配单元240,用于从创建单元220创建的共享内存池中获取一个长度为第二获取单元230获取的需求长度的内存块进行分配使用。
综上所述,本实施例提供的内存管理装置,通过创建共享内存池,由该共享内存池提供至少两种不同长度的内存块的申请服务,并在获取内存申请所对应的需求长度时,从共享内存池中获取一个长度为需求长度的内存块进行分配使用;解决了相关技术存在的内存浪费严重,内存的总利用率低的问题;通过不同长度的内存块共用一个共享内存池,既可以保证在内存分配时应对不同长度内存块的峰值需求,又可以达到节约内存、提高内存的总利用率的效果。
请参考图3,其示出了本发明另一实施例提供的内存管理装置的结构方框图。该内存管理装置可通过软件、硬件或者两者的结合实现。该内存管理装置可设置于处理器内部,用于对内存进行管理。该内存管理装置可以包括:第一获取单元210、创建单元220、第二获取单元230和分配单元240。
第一获取单元210,用于向操作***申请预定大小的待分配内存。
创建单元220,用于根据第一获取单元210获取的待分配内存创建共享内存池。
其中,共享内存池中包括将待分配内存划分得到的n个长度为预定长度的内存块,共享内存池用于提供至少两种不同长度的内存块的内存申请服务,该至少两种不同长度中的每一种长度小于或等于上述预定长度,n≥2且n为正整数。
可选的,该至少两种不同长度的内存块包括w级不同长度的内存块,且第i+1级内存块的长度是第i级内存块的长度的q倍,第w级内存块的长度为预定长度,w≥2,1≤i≤w-1,q≥2且w、i、q均为整数。
第二获取单元230,用于获取内存申请所对应的需求长度,该需求长度是上述至少两种不同长度中的一种。
分配单元240,用于从创建单元220创建的共享内存池中获取一个长度为第二获取单元230获取的需求长度的内存块进行分配使用。
其中,分配单元240,具体用于:
检测共享内存池中是否存在空闲的且长度为需求长度的第一内存块;
若共享内存池中存在第一内存块,则将第一内存块进行分配使用。
可选的,分配单元240,具体还用于:
若共享内存池中不存在第一内存块,则从共享内存池中选取空闲的且长度大于需求长度的第二内存块;
将第二内存块划分为m个内存块,该m个内存块中包含长度为需求长度的内存块,m≥2且m为整数;
从该m个内存块中选取长度为需求长度的内存块进行分配使用。
可选的,分配单元240,具体还用于:
当共享内存池中存在至少两种不同长度的第二内存块时,从共享内存池中选取空闲的、长度大于且最接近于需求长度的第二内存块。
可选的,该装置还包括:第三获取单元250、检测单元260和合并单元270。
第三获取单元250,用于获取需要释放的内存块对应的内存地址和长度。
检测单元260,用于当需要释放的内存块的长度小于预定长度时,根据第三获取单元250获取的内存地址检测该需要释放的内存块所属的目标内存块中的其它内存块是否空闲,该目标内存块的长度是上述至少两种不同长度中的一种且该目标内存块的长度大于且最接近于需要释放的内存块的长度。
合并单元270,用于当其它内存块空闲时,将需要释放的内存块和其它内存块合并为上述目标内存块,该目标内存块的长度是上述至少两种不同长度中的一种。
综上所述,本实施例提供的内存管理装置,通过创建共享内存池,由该共享内存池提供至少两种不同长度的内存块的申请服务,并在获取内存申请所对应的需求长度时,从共享内存池中获取一个长度为需求长度的内存块进行分配使用;解决了相关技术存在的内存浪费严重,内存的总利用率低的问题;通过不同长度的内存块共用一个共享内存池,既可以保证在内存分配时应对不同长度内存块的峰值需求,又可以达到节约内存、提高内存的总利用率的效果。
另外,本实施例提供的内存管理装置,在内存分配时,当共享内存池中不存在长度为需求长度的内存块时,通过从长度大于需求长度的内存块中划分得到长度为需求长度的内存块进行分配,采用上述变长的块内存分配方式,使得共享内存池可提供多种不同长度的块内存的内存申请服务,且分配过程灵活高
效。
另外,本实施例提供的内存管理装置,当共享内存池中存在至少两种不同长度的第二内存块时,还通过从共享内存池中选取空闲的、长度大于且最接近于需求长度的第二内存块,可以提高内存分配的可靠性和灵活性,以应对后续不同的内存申请需求。
另外,本实施例提供的内存管理装置,还通过将长度小的内存块合并为长度大的内存块,尽量保证共享内存池中存在充足的且长度较大的空闲内存块,以便为后续不同的内存申请需求提供保障,确保内存分配的可靠性和效率。
需要说明的是:上述实施例提供的内存管理装置在进行内存管理时,仅以上述各功能单元的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元完成,即将设备的内部结构划分成不同的功能单元,以完成以上描述的全部或者部分功能。另外,上述实施例提供的内存管理装置与下述实施例提供的内存管理方法的方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
请参考图4,其示出了本发明再一实施例提供的内存管理装置的结构示意图。该内存管理装置400可以是设置于处理器内部、用于对内存进行管理的硬件装置,如BMU。该内存管理装置400可以包括:控制器410和寄存器420。其中:
寄存器420用于存储一个或者一个以上的指令,该指令用于实现一种内存管理方法,该指令包括:
获取预定大小的待分配内存;
根据待分配内存创建共享内存池,该共享内存池中包括将待分配内存划分得到的n个长度为预定长度的内存块,该共享内存池用于提供至少两种不同长度的内存块的内存申请服务,该至少两种不同长度中的每一种长度小于或等于上述预定长度,n≥2且n为正整数;
获取内存申请所对应的需求长度,该需求长度是上述至少两种不同长度中的一种;
从共享内存池中获取一个长度为上述需求长度的内存块进行分配使用;
控制器410用于执行上述指令。
综上所述,本实施例提供的内存管理装置,通过创建共享内存池,由该共享内存池提供至少两种不同长度的内存块的申请服务,并在获取内存申请所对应的需求长度时,从共享内存池中获取一个长度为需求长度的内存块进行分配使用;解决了相关技术存在的内存浪费严重,内存的总利用率低的问题;通过不同长度的内存块共用一个共享内存池,既可以保证在内存分配时应对不同长度内存块的峰值需求,又可以达到节约内存、提高内存的总利用率的效果。
在基于图4所示实施例提供的可选实施例中,寄存器420还存储有用于执行以下操作的指令:
检测共享内存池中是否存在空闲的且长度为需求长度的第一内存块;
若共享内存池中存在第一内存块,则将第一内存块进行分配使用;
控制器410还用于执行上述指令。
在基于图4所示实施例提供的可选实施例中,寄存器420还存储有用于执行以下操作的指令:
当共享内存池中不存在第一内存块时,从共享内存池中选取空闲的且长度大于需求长度的第二内存块;
将第二内存块划分为m个内存块,该m个内存块中包含长度为需求长度的内存块,m≥2且m为整数;
从该m个内存块中选取长度为需求长度的内存块进行分配使用;
控制器410还用于执行上述指令。
在基于图4所示实施例提供的可选实施例中,寄存器420还存储有用于执行以下操作的指令:
当共享内存池中存在至少两种不同长度的第二内存块时,从共享内存池中选取空闲的、长度大于且最接近于需求长度的第二内存块;
控制器410还用于执行上述指令。
在基于图4所示实施例提供的可选实施例中,寄存器420还存储有用于执行以下操作的指令:
获取需要释放的内存块对应的内存地址和长度;
当需要释放的内存块的长度小于预定长度时,根据内存地址检测该需要释放的内存块所属的目标内存块中的其它内存块是否空闲,该目标内存块的长度是上述至少两种不同长度中的一种且该目标内存块的长度大于且最接近于需要释放的内存块的长度;
若其它内存块空闲,则将需要释放的内存块和其它内存块合并为上述目标内存块,该目标内存块的长度是上述至少两种不同长度中的一种;
控制器410还用于执行上述指令。
在基于图4所示实施例提供的可选实施例中,上述至少两种不同长度的内存块包括w级不同长度的内存块,且第i+1级内存块的长度是第i级内存块的长度的q倍,第w级内存块的长度为预定长度,w≥2,1≤i≤w-1,q≥2且w、i、q均为整数。
综上所述,本实施例提供的内存管理装置,在内存分配时,当共享内存池中不存在长度为需求长度的内存块时,通过从长度大于需求长度的内存块中划分得到长度为需求长度的内存块进行分配,采用上述变长的块内存分配方式,使得共享内存池可提供多种不同长度的块内存的内存申请服务,且分配过程灵活高效。
另外,本实施例提供的内存管理装置,当共享内存池中存在至少两种不同长度的第二内存块时,还通过从共享内存池中选取空闲的、长度大于且最接近于需求长度的第二内存块,可以提高内存分配的可靠性和灵活性,以应对后续不同的内存申请需求。
另外,本实施例提供的内存管理装置,还通过将长度小的内存块合并为长度大的内存块,尽量保证共享内存池中存在充足的且长度较大的空闲内存块,以便为后续不同的内存申请需求提供保障,确保内存分配的可靠性和效率。
下面是本发明的方法实施例,各个方法实施例与上面的装置实施例互相对应。对于本发明装置实施例中未披露的细节,请参照本发明方法实施例。
请参考图5,其示出了本发明一个实施例提供的内存管理方法的方法流程图。本实施例以该内存管理方法应用于图1所示实施环境中的内存管理装置中进行举例说明,该内存管理装置可以是设置有处理器内部的BMU。该内存管理方法可以包括如下几个步骤:
步骤502,获取预定大小的待分配内存。
步骤504,根据待分配内存创建共享内存池,该共享内存池中包括将待分配内存划分得到的n个长度为预定长度的内存块,该共享内存池用于提供至少两种不同长度的内存块的内存申请服务,该至少两种不同长度中的每一种长度小于或等于上述预定长度,n≥2且n为正整数。
步骤506,获取内存申请所对应的需求长度,该需求长度是上述至少两种不同长度中的一种。
步骤508,从共享内存池中获取一个长度为上述需求长度的内存块进行分配使用。
综上所述,本实施例提供的内存管理方法,通过创建共享内存池,由该共享内存池提供至少两种不同长度的内存块的申请服务,并在获取内存申请所对应的需求长度时,从共享内存池中获取一个长度为需求长度的内存块进行分配使用;解决了相关技术存在的内存浪费严重,内存的总利用率低的问题;通过不同长度的内存块共用一个共享内存池,既可以保证在内存分配时应对不同长度内存块的峰值需求,又可以达到节约内存、提高内存的总利用率的效果。
请参考图6A,其示出了本发明另一实施例提供的内存管理方法的方法流程图。本实施例以该内存管理方法应用于图1所示实施环境中的内存管理装置中进行举例说明,该内存管理装置可以是设置有处理器内部的BMU。该内存管理方法可以包括如下几个步骤:
步骤601,获取预定大小的待分配内存。
内存管理装置通过步骤601和步骤602对内存进行初始化配置。
首先,内存管理装置自身向操作***申请预定大小的待分配内存,或者通过软件向操作***申请预定大小的待分配内存。其中,预定大小可以是根据实际需求预先设定的经验值。比如,预定大小可根据内存申请所需的各种不同长度的内存块的使用峰值预先进行设定;和/或,预定大小也可根据操作***所管理的物理内存的大小预先进行设定。
另外,在通常情况下,操作***提供给内存管理装置的待分配内存所对应的预定大小小于操作***所管理的物理内存的大小。比如,假设操作***所管理的物理内存的大小为M,则操作***可将大小为N的内存提供给内存管理装置作为可分配内存,其中M>N。操作***预留的大小为M-N的内存是操作***正常运行所需的内存。
步骤602,根据待分配内存创建共享内存池。
之后,内存管理装置根据申请得到的待分配内存创建共享内存池。其中,共享内存池中包括将待分配内存划分得到的n个长度为预定长度的内存块,n≥2且n为正整数。该共享内存池用于提供至少两种不同长度的内存块的内存
申请服务,该至少两种不同长度中的每一种长度小于或等于上述预定长度。比如,当预定长度为4X时,共享内存池可提供长度为X、2X和4X等不同长度的内存块的内存申请服务。再比如,当预定长度为5X时,共享内存池可提供长度为X、2X、3X、4X和5X等不同长度的内存块的内存申请服务。
与背景技术所提供的内存管理方法所不同的是:在背景技术提供的内存管理方法中,当内存管理装置需要向外提供w种不同长度的内存块的内存申请服务时,其需要创建w个内存池,w≥2且w为整数。比如,如图6B所示,若采用背景技术提供的内存管理方法,当内存管理装置需要向外提供长度分别为X、2X和4X三种不同长度的内存块的内存申请服务时,其需要创建3个内存池,如图6B中内存池1、内存池2和内存池3。其中,内存池1中包括n1个长度为X的内存块,内存池2中包括n2个长度为2X的内存块,内存池3中包括n3个长度为4X的内存块。
而在本实施例中,当内存管理装置需要向外提供w种不同长度的内存块的内存申请服务时,其仅需创建一个共享内存池,w≥2且w为整数。仍然以内存管理装置向外提供长度分别为X、2X和4X三种不同长度的内存块的内存申请服务为例,如图6C所示,内存管理装置创建一个共享内存池,该共享内存池中包括n个长度为4X的内存块。换句话说,在本实施例中,当内存管理装置需要向外提供多种不同长度的内存块的内存申请服务时,其对外可呈现多个内存池,而对内仅需维护一个内存池。
下面,通过步骤603和步骤604介绍内存分配过程:
步骤603,获取内存申请所对应的需求长度。
内存管理装置向外部的软件和/或硬件提供不同长度的块内存的内存申请服务。外部的软件和/或硬件可向内存管理装置申请需求长度的内存块;相应的,内存管理装置获取内存申请所对应的需求长度。其中,需求长度是上述至少两种不同长度中的一种。
比如,结合参考图6C,内存管理装置对外可呈现三个内存池,假设分别为Pool A、Pool B和Pool C。其中,Pool A对应于长度为X的内存块,Pool B对应于长度为2X的内存块,Pool C对应于长度为4X的内存块。当外部的软件和/或硬件需要申请长度为X的内存块时,访问Pool A;当外部的软件和/或硬件需要申请长度为2X的内存块时,访问Pool B;当外部的软件和/或硬件需要申请长度为4X的内存块时,访问Pool C。相应的,内存管理装置可根据外
部的软件和/或硬件所访问的内存池确定内存申请所对应的需求长度。
步骤604,从共享内存池中获取一个长度为上述需求长度的内存块进行分配使用。
由于内存管理装置对内仅维护一个共享内存池,因此当内存管理装置获取到需求长度时,不论该需求长度是多少,内存管理装置均从共享内存池中获取一个长度为需求长度的内存块进行分配使用。
具体来讲,如图6D所示,本步骤可以包括如下几个子步骤:
步骤604a,检测共享内存池中是否存在空闲的且长度为需求长度的第一内存块。
内存管理装置可使用不同的标识区分内存块是否空闲。当内存管理装置获取内存申请所对应的需求长度时,检测共享内存池中是否存在空闲的且长度为需求长度的第一内存块。结合参考图6C,比如,当需求长度为X时,内存管理装置检测共享内存池中是否存在空闲的且长度为X的内存块;再比如,当需求长度为2X时,内存管理装置检测共享内存池中是否存在空闲的且长度为2X的内存块,以此类推。
若共享内存池中存在上述第一内存块,则执行下述步骤604b;否则,执行下述步骤604c至步骤604e。
步骤604b,将第一内存块进行分配使用。
当共享内存池中存在空闲的且长度为需求长度的第一内存块时,内存管理装置将第一内存块进行分配使用。可选的,当满足上述要求的第一内存块的数量为多个时,内存管理装置从中选取一个第一内存块进行分配使用。
步骤604c,从共享内存池中选取空闲的且长度大于需求长度的第二内存块。
当共享内存池中不存在空闲的且长度为需求长度的第一内存块时,内存管理装置从共享内存池中选取空闲的且长度大于需求长度的第二内存块。结合参考图6C,比如,当需求长度为X,而共享内存池中不存在空闲的且长度为X的内存块时,内存管理装置检测共享内存池中是否存在空闲的且长度为2X或4X的内存块;再比如,当需求长度为2X,而共享内存池中不存在空闲的且长度为2X的内存块时,内存管理装置检测共享内存池中是否存在空闲的且长度为4X的内存块,以此类推。
可选的,内存管理装置在执行上述步骤604c之前还可执行如下步骤:当
共享内存池中不存在空闲的且长度为需求长度的第一内存块时,检测共享内存池中是否存在空闲的且长度大于需求长度的第二内存块;若共享内存池中存在满足上述要求的第二内存块,则执行上述步骤604c;否则,反馈内存分配失败的响应。其中,导致共享内存池中不存在满足上述要求的第二内存块的情况的原因可以包括:需求长度即为共享内存池所能提供的内存块的最大长度,且共享内存池中不存在空闲的且长度为需求长度的第一内存块;或者,共享内存池中存在长度大于需求长度的内存块,但这些内存块均处于使用状态。
步骤604d,将第二内存块划分为m个内存块,该m个内存块中包含长度为需求长度的内存块,m≥2且m为整数。
内存管理装置将选取的第二内存块划分为m个内存块,该m个内存块中包含至少一个长度为需求长度的内存块。比如,结合参考图6C和6E,假设初始化配置后共享内存池中存在n个长度为4X的内存块。当第一次内存申请所对应的需求长度为X时,内存管理装置可选取1个长度为4X的内存块,并将其划分为3个内存块(包括2个长度为X的内存块61、62和1个长度为2X的内存块63)。
步骤604e,从该m个内存块中选取长度为需求长度的内存块进行分配使用。
内存管理装置从划分得到的m个内存块中选取长度为需求长度的内存块进行分配使用。可选的,当划分得到的m个内存块中存在多个长度为需求长度的内存块时,内存管理装置从中选取一个长度为需求长度的内存块分配使用。比如,对于上述举例的第一次内存申请,内存管理装置从划分得到的3个内存块中选取1个长度为X的内存块分配使用(如图6E中斜线所示的长度为X的内存块61)。再比如,假设第二次内存申请所对应的需求长度为2X时,内存管理装置可检测出共享内存池中存在空闲的且长度为2X的内存块,则将该长度为2X的内存块分配使用(如图6E中斜线所示的长度为2X的内存块63)。
可选的,对于上述步骤604c,当共享内存池中存在至少两种不同长度的第二内存块时,内存管理装置从共享内存池中选取空闲的、长度大于且最接近于需求长度的第二内存块。比如,当需求长度为X,而共享内存池中存在长度分别为2X和4X的第二内存块时,内存管理装置选取长度为2X的第二内存块。通过选取空闲的、长度大于且最接近于需求长度的第二内存块,可以提高内存分配的可靠性和灵活性,以应对后续不同的内存申请需求。
举例来讲,当某次内存申请所对应的需求长度为X,而共享内存池中还存在一个空闲的且长度为2X的内存块和一个空闲的且长度为4X的内存块。若内存管理装置选取长度为4X的内存块进行划分(假设划分为2个长度为X的内存块和1个长度为2X的内存块),则此次分配后共享内存池中还剩余的空闲的内存块包括1个长度为X的内存块和2个长度为2X的内存块,那么在无其它内存块释放的情况下,共享内存池无法继续提供长度为4X的内存块。若内存管理装置选取长度为2X的内存块进行划分(假设划分为2个长度为X的内存块),则此次分配后共享内存池中还剩余的空闲的内存块包括1个长度为X的内存块和1个长度为4X的内存块,那么在无其它内存块释放的情况下,共享内存池可以继续提供长度为X、2X或者4X的内存块。
可选的,内存管理装置向外提供的至少两种不同长度的内存块可包括w级不同长度的内存块。其中,第i+1级内存块的长度是第i级内存块的长度的q倍,第w级内存块的长度为上述预定长度,w≥2,1≤i≤w-1,q≥2且w、i、q均为整数。比如,上述至少两种不同长度包括:X、2X、4X、8X等。再比如,上述至少两种不同长度包括X、3X、9X等。
当然,本实施例并不限定其它可能的实施方式。比如,在其它可能的实施方式中,相邻级内存块之间的长度可不具有相同的倍数关系。比如,上述至少两种不同长度包括:X、4X、7X等。这样,当需要对长度为4X的内存块进行分割时,只能将其分割为4个长度为X的内存块,当需要对长度为7X的内存块进行分割时,只能将其分割为1个长度为4X的内存块和3个长度为X的内存块,长此以往将会导致共享内存池中剩余大量的长度较小的内存块(如长度为X的内存块),最终导致共享内存池无法应对长度较大的内存块的申请需求。因此,上述相邻级内存块之间的长度具有相同的倍数关系仅是一种较佳的实施方式,可以使得共享内存池在分割内存块时更为合理、灵活,防止内存碎片化,以应对后续不同的内存申请需求。
在本实施例中,通过不同长度的内存块共用一个共享内存池,既可以保证在内存分配时应对不同长度内存块的峰值需求,又可以达到节约内存、提高内存的总利用率的效果。具体来讲,假设内存管理装置需要向外提供w种不同长度的内存块的内存申请服务,若采用背景技术提供的内存管理方法,其至少需要向操作***申请的待分配内存大小其中,Lk表示第k种长度的内存块的长度,nk表示第k种长度的内存块的峰值需求数量,w≥2且w为整
数。若采用本实施例提供的内存管理方法,内存管理装置向操作***申请的待分配内存的大小N的范围为:
在一个具体的例子中,结合参考图6B,若采用背景技术提供的内存管理方法,假设X、2X和4X三种不同长度的内存块对应的使用峰值均为Y个,则内存管理装置至少需要向操作***申请的待分配内存大小N=XY+2XY+4XY=7XY,这样才能保证内存分配能够应对不同长度内存块的峰值需求。结合参考图6C,若采用本实施例提供的内存管理方法,内存管理装置仅需向操作***申请大小为4XY~5XY左右的待分配内存,即可保证内存分配能够应对不同长度内存块的峰值需求。可见,相比于背景技术提供的内存管理方法,在保证同样的内存分配需求的前提下,本实施例提供的内存管理方法可节约30%~40%左右的内存。尤其是对于嵌入式***来讲,可充分满足嵌入式***对内存容量和成本的要求。
综上所述,本实施例提供的内存管理方法,通过创建共享内存池,由该共享内存池提供至少两种不同长度的内存块的申请服务,并在获取内存申请所对应的需求长度时,从共享内存池中获取一个长度为需求长度的内存块进行分配使用;解决了相关技术存在的内存浪费严重,内存的总利用率低的问题;通过不同长度的内存块共用一个共享内存池,既可以保证在内存分配时应对不同长度内存块的峰值需求,又可以达到节约内存、提高内存的总利用率的效果。
另外,本实施例提供的内存管理方法,在内存分配时,当共享内存池中不存在长度为需求长度的内存块时,从长度大于需求长度的内存块中划分得到长度为需求长度的内存块进行分配,采用上述变长的块内存分配方式,使得共享内存池可提供多种不同长度的块内存的内存申请服务,且分配过程灵活高效。
另外,本实施例提供的内存管理方法,当共享内存池中存在至少两种不同长度的第二内存块时,还通过从共享内存池中选取空闲的、长度大于且最接近于需求长度的第二内存块,可以提高内存分配的可靠性和灵活性,以应对后续不同的内存申请需求。
请参考图7A/7B,其示出了本发明再一实施例提供的内存管理方法的方法流程图。如图7A所示,上述图6A所示实施例的步骤604a可以包括如下几个子步骤:
步骤604a1,检测共享内存池的指定内存块集合中是否存在第一内存块。
步骤604a2,若存在,则从指定内存块集合中选取第一内存块进行分配使用。
其中,指定内存块集合中包含至少一个内存块,该指定内存块集合中所包含的内存块用于在内存分配时被优先选取。指定内存块集合中所包含的内存块可以预先选定,比如在创建完成共享内存池之后选定头部若干个内存块,再比如在创建完成共享内存池之后选定尾部若干个内存块。或者,指定内存块集合中所包含的内存块也可在内存分配过程中确定,比如通过栈的方式控制若干个内存块被优先选取。
在本实施例中,当获取到内存申请所对应的需求长度时,内存管理装置检测指定内存块集合中是否存在空闲的且长度为需求长度的第一内存块。当指定内存块集合中存在满足上述要求的第一内存块时,内存管理装置优先从指定内存块集合中选取一个第一内存块进行分配使用。内存管理装置通过精确控制内存块的分配使用,使得某一部分内存块被高频率地使用,这样有利于提高读取命中率和***性能。
类似的,如图7B所示,上述图6A所示实施例的步骤604c可以包括如下几个子步骤:
步骤604c1,检测共享内存池的指定内存块集合中是否存在第二内存块。
步骤604c2,若存在,则从指定内存块集合中选取第二内存块进行分配使用。
在本实施例中,当共享内存池中不存在空闲的且长度为需求长度的第一内存块时,内存管理装置检测指定内存块集合中是否存在空闲的且长度大于需求长度的第二内存块。当指定内存块集合中存在满足上述要求的第二内存块时,内存管理装置优先从指定内存块集合中选取一个第二内存块进行分配使用。内存管理装置通过精确控制内存块的分配使用,使得某一部分内存块被高频率地使用,这样有利于提高读取命中率和***性能。另外,当指定内存块集合中不存在满足上述要求的第二内存块时,内存管理装置从共享内存池中的其它内存块中获取一个满足上述要求的第二内存块进行分配使用。
需要说明的一点是:当指定内存块集合中不存在空闲的且长度为需求长度的第一内存块时,内存管理装置可以从共享内存池中的其它内存块中获取一个满足上述要求的第一内存块进行分配使用;或者,内存管理装置也可执行上述
步骤604c1,对此本实施例不作具体限定。
综上所述,本实施例提供的内存管理方法,在进行内存分配时,通过精确控制内存块的分配使用,使得某一部分内存块被高频率地使用,这样有利于提高读取命中率和***性能。
下面,通过图8所示实施例介绍内存释放过程:
请参考图8,其示出了本发明还一实施例提供的内存管理方法的方法流程图。在该内存管理方法中,在图6A所示实施例的步骤602之后,还包括:
步骤605,获取需要释放的内存块对应的内存地址和长度。
内存管理装置获取需要释放的内存块对应的内存地址和长度。内存地址用于对不同的内存块进行标识和区分,不同的内存块对应于不同的内存地址。
步骤606,当需要释放的内存块的长度小于预定长度时,根据内存地址检测该需要释放的内存块所属的目标内存块中的其它内存块是否空闲。
其中,目标内存块的长度是上述至少两种不同长度中的一种,且目标内存块的长度大于且最接近于需要释放的内存块的长度。
步骤607,若其它内存块空闲,则将需要释放的内存块和其它内存块合并为目标内存块。
比如,结合参考图6E,当需要释放的内存块为长度为X的内存块61时,内存管理装置根据该内存块61的内存地址检测其所属的目标内存块中的其它内存块是否空闲。在图6E中,目标内存块即为由内存块61和内存块62所构成的长度为2X的内存块。若内存管理装置检测出内存块62空闲,则内存管理装置将内存块61和内存块62合并为一个长度为2X的内存块。另外,若内存管理装置检测出内存块62处于使用状态,则结束流程。
进一步地,内存管理装置在合并得到目标内存块之后,还可继续检测是否可以将目标内存块和其它内存块合并为更高一级(也即长度更大)的内存块;若可以,则继续执行内存块合并步骤,直至得到一个长度为上述预定长度的内存块。比如,在图6E中,若内存块63也空闲,则内存管理装置可进一步将上述合并得到的一个长度为2X的内存块与内存块63合并为一个长度为4X的内存块。
另外,当需要释放的内存块的长度等于预定长度时,结束流程。由于预定长度是共享内存池所能提供的内存块的最大长度,当需要释放的内存块的长度
等于预定长度时,内存管理装置无需执行内存块合并步骤。
综上所述,本实施例提供的内存管理方法,还通过将长度小的内存块合并为长度大的内存块,尽量保证共享内存池中存在充足的且长度较大的空闲内存块,以便为后续不同的内存申请需求提供保障,确保内存分配的可靠性和效率。
可以理解,图2至图4任一实施例提供的内存管理装置可以执行图5、图6A、图7A、图7B和图8任一实施例提供的内存管理方法,为描述之简洁,装置实施例各单元或组成部件的具体功能及工作流程可以参照方法实施例部分的相关,不做过多赘述,同时,本发明提供的各个实施例的内容描述也可以相互参照。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (18)
- 一种内存管理装置,其特征在于,所述装置包括:第一获取单元,用于获取预定大小的待分配内存;创建单元,用于根据所述待分配内存创建共享内存池,所述共享内存池中包括将所述待分配内存划分得到的n个长度为预定长度的内存块,所述共享内存池用于提供至少两种不同长度的内存块的内存申请服务,所述至少两种不同长度中的每一种长度小于或等于所述预定长度,n≥2且n为正整数;第二获取单元,用于获取内存申请所对应的需求长度,所述需求长度是所述至少两种不同长度中的一种;分配单元,用于从所述共享内存池中获取一个长度为所述需求长度的内存块进行分配使用。
- 根据权利要求1所述的装置,其特征在于,所述分配单元,具体用于:检测所述共享内存池中是否存在空闲的且长度为所述需求长度的第一内存块;若所述共享内存池中存在所述第一内存块,则将所述第一内存块进行分配使用。
- 根据权利要求2所述的装置,其特征在于,所述分配单元,具体还用于:若所述共享内存池中不存在所述第一内存块,则从所述共享内存池中选取空闲的且长度大于所述需求长度的第二内存块;将所述第二内存块划分为m个内存块,所述m个内存块中包含长度为所述需求长度的内存块,m≥2且m为整数;从所述m个内存块中选取所述长度为所述需求长度的内存块进行分配使用。
- 根据权利要求3所述的装置,其特征在于,所述分配单元,具体还用于:当所述共享内存池中存在至少两种不同长度的所述第二内存块时,从所述共享内存池中选取空闲的、长度大于且最接近于所述需求长度的第二内存块。
- 根据权利要求1至4任一所述的装置,其特征在于,所述装置还包括:第三获取单元,用于获取需要释放的内存块对应的内存地址和长度;检测单元,用于当所述需要释放的内存块的长度小于所述预定长度时,根据所述内存地址检测所述需要释放的内存块所属的目标内存块中的其它内存块是否空闲,所述目标内存块的长度是所述至少两种不同长度中的一种且所述目标内存块的长度大于所述需要释放的内存块的长度;合并单元,用于当所述其它内存块空闲时,将所述需要释放的内存块和所述其它内存块合并为所述目标内存块,所述目标内存块的长度是所述至少两种不同长度中的一种。
- 根据权利要求1至5任一所述的装置,其特征在于,所述至少两种不同长度的内存块包括w级不同长度的内存块,且第i+1级内存块的长度是第i级内存块的长度的q倍,第w级内存块的长度为所述预定长度,w≥2,1≤i≤w-1,q≥2且w、i、q均为整数。
- 一种内存管理装置,其特征在于,所述装置包括:控制器和寄存器;所述寄存器用于存储一个或者一个以上的指令,所述指令用于实现一种内存管理方法;所述方法包括:获取预定大小的待分配内存;根据所述待分配内存创建共享内存池,所述共享内存池中包括将所述待分配内存划分得到的n个长度为预定长度的内存块,所述共享内存池用于提供至少两种不同长度的内存块的内存申请服务,所述至少两种不同长度中的每一种长度小于或等于所述预定长度,n≥2且n为正整数;获取内存申请所对应的需求长度,所述需求长度是所述至少两种不同长度中的一种;从所述共享内存池中获取一个长度为所述需求长度的内存块进行分配使用;所述控制器用于执行所述指令。
- 根据权利要求7所述的装置,其特征在于,所述寄存器还存储有用于执 行以下操作的指令:检测所述共享内存池中是否存在空闲的且长度为所述需求长度的第一内存块;若所述共享内存池中存在所述第一内存块,则将所述第一内存块进行分配使用;所述控制器还用于执行所述指令。
- 根据权利要求8所述的装置,其特征在于,所述寄存器还存储有用于执行以下操作的指令:当所述共享内存池中不存在所述第一内存块时,从所述共享内存池中选取空闲的且长度大于所述需求长度的第二内存块;将所述第二内存块划分为m个内存块,所述m个内存块中包含长度为所述需求长度的内存块,m≥2且m为整数;从所述m个内存块中选取所述长度为所述需求长度的内存块进行分配使用;所述控制器还用于执行所述指令。
- 根据权利要求9所述的装置,其特征在于,所述寄存器还存储有用于执行以下操作的指令:当所述共享内存池中存在至少两种不同长度的所述第二内存块时,从所述共享内存池中选取空闲的、长度大于且最接近于所述需求长度的第二内存块;所述控制器还用于执行所述指令。
- 根据权利要求7至10任一所述的装置,其特征在于,所述寄存器还存储有用于执行以下操作的指令:获取需要释放的内存块对应的内存地址和长度;当所述需要释放的内存块的长度小于所述预定长度时,根据所述内存地址检测所述需要释放的内存块所属的目标内存块中的其它内存块是否空闲,所述目标内存块的长度是所述至少两种不同长度中的一种且所述目标内存块的长度大于所述需要释放的内存块的长度;若所述其它内存块空闲,则将所述需要释放的内存块和所述其它内存块合 并为所述目标内存块,所述目标内存块的长度是所述至少两种不同长度中的一种;所述控制器还用于执行所述指令。
- 根据权利要求7至11任一所述的装置,其特征在于,所述至少两种不同长度的内存块包括w级不同长度的内存块,且第i+1级内存块的长度是第i级内存块的长度的q倍,第w级内存块的长度为所述预定长度,w≥2,1≤i≤w-1,q≥2且w、i、q均为整数。
- 一种内存管理方法,其特征在于,所述方法包括:获取预定大小的待分配内存;根据所述待分配内存创建共享内存池,所述共享内存池中包括将所述待分配内存划分得到的n个长度为预定长度的内存块,所述共享内存池用于提供至少两种不同长度的内存块的内存申请服务,所述至少两种不同长度中的每一种长度小于或等于所述预定长度,n≥2且n为正整数;获取内存申请所对应的需求长度,所述需求长度是所述至少两种不同长度中的一种;从所述共享内存池中获取一个长度为所述需求长度的内存块进行分配使用。
- 根据权利要求13所述的方法,其特征在于,所述从所述共享内存池中获取一个长度为所述需求长度的内存块进行分配使用,包括:检测所述共享内存池中是否存在空闲的且长度为所述需求长度的第一内存块;若所述共享内存池中存在所述第一内存块,则将所述第一内存块进行分配使用。
- 根据权利要求14所述的方法,其特征在于,所述检测所述共享内存池中是否存在空闲的且长度为所述需求长度的第一内存块之后,还包括:若所述共享内存池中不存在所述第一内存块,则从所述共享内存池中选取空闲的且长度大于所述需求长度的第二内存块;将所述第二内存块划分为m个内存块,所述m个内存块中包含长度为所述需求长度的内存块,m≥2且m为整数;从所述m个内存块中选取所述长度为所述需求长度的内存块进行分配使用。
- 根据权利要求15所述的方法,其特征在于,所述从所述共享内存池中选取空闲的且长度大于所述需求长度的第二内存块,包括:当所述共享内存池中存在至少两种不同长度的所述第二内存块时,从所述共享内存池中选取空闲的、长度大于且最接近于所述需求长度的第二内存块。
- 根据权利要求13至16任一所述的方法,其特征在于,所述方法还包括:获取需要释放的内存块对应的内存地址和长度;当所述需要释放的内存块的长度小于所述预定长度时,根据所述内存地址检测所述需要释放的内存块所属的目标内存块中的其它内存块是否空闲,所述目标内存块的长度是所述至少两种不同长度中的一种且所述目标内存块的长度大于且最接近于所述需要释放的内存块的长度;若所述其它内存块空闲,则将所述需要释放的内存块和所述其它内存块合并为所述目标内存块。
- 根据权利要求13至17任一所述的方法,其特征在于,所述至少两种不同长度的内存块包括w级不同长度的内存块,且第i+1级内存块的长度是第i级内存块的长度的q倍,第w级内存块的长度为所述预定长度,w≥2,1≤i≤w-1,q≥2且w、i、q均为整数。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2015/072535 WO2016127291A1 (zh) | 2015-02-09 | 2015-02-09 | 内存管理装置和方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107209716A true CN107209716A (zh) | 2017-09-26 |
CN107209716B CN107209716B (zh) | 2020-04-21 |
Family
ID=56614242
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201580075454.8A Active CN107209716B (zh) | 2015-02-09 | 2015-02-09 | 内存管理装置和方法 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN107209716B (zh) |
WO (1) | WO2016127291A1 (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107766153A (zh) * | 2017-10-17 | 2018-03-06 | 华为技术有限公司 | 一种内存管理方法及装置 |
CN110287127A (zh) * | 2019-05-14 | 2019-09-27 | 江苏大学 | 一种多粒度多核可扩展的非易失性内存管理方法及*** |
CN110427273A (zh) * | 2019-06-25 | 2019-11-08 | 平安科技(深圳)有限公司 | 内存调度方法、装置、设备及存储介质 |
CN110858162A (zh) * | 2018-08-24 | 2020-03-03 | 华为技术有限公司 | 内存管理方法及装置、服务器 |
CN113467930A (zh) * | 2021-05-31 | 2021-10-01 | 翱捷科技股份有限公司 | 一种硬件管理共享内存的处理方法及装置 |
CN114296917A (zh) * | 2021-12-23 | 2022-04-08 | 中汽创智科技有限公司 | 一种内存分配方法、装置、自适应汽车开放***架构 |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110008021B (zh) * | 2019-03-05 | 2024-05-28 | 平安科技(深圳)有限公司 | 内存管理方法、装置、电子设备及计算机可读存储介质 |
CN111796902B (zh) * | 2019-04-08 | 2024-03-19 | 维塔科技(北京)有限公司 | 切换共享内存区的方法和装置、存储介质和电子设备 |
CN111143064A (zh) * | 2019-12-25 | 2020-05-12 | 浙江中控技术股份有限公司 | 一种处理内存的方法及*** |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1393780A (zh) * | 2001-06-28 | 2003-01-29 | 华为技术有限公司 | 自适应动态内存管理方法 |
CN101329655A (zh) * | 2008-07-31 | 2008-12-24 | 北京天碁科技有限公司 | 一种内存管理方法和内存管理装置 |
CN101673246A (zh) * | 2009-08-06 | 2010-03-17 | 深圳市融创天下科技发展有限公司 | 一种高效的先进先出数据池读写方法 |
CN102063385A (zh) * | 2010-12-23 | 2011-05-18 | 深圳市金宏威实业发展有限公司 | 一种内存管理方法和*** |
CN102455974A (zh) * | 2010-10-21 | 2012-05-16 | 上海宝信软件股份有限公司 | 一种内存消耗可控的高速内存申请释放管理***及方法 |
CN103425592A (zh) * | 2013-08-05 | 2013-12-04 | 大唐移动通信设备有限公司 | 一种多进程***中的内存管理方法及装置 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102650931B (zh) * | 2012-04-01 | 2015-07-08 | 华为技术有限公司 | 一种写入数据的方法及*** |
CN103077126B (zh) * | 2012-12-24 | 2016-08-03 | 中兴通讯股份有限公司 | 一种内存管理方法和装置 |
CN103838859B (zh) * | 2014-03-19 | 2019-04-26 | 厦门雅迅网络股份有限公司 | 一种减少linux下多进程间数据拷贝的方法 |
-
2015
- 2015-02-09 WO PCT/CN2015/072535 patent/WO2016127291A1/zh active Application Filing
- 2015-02-09 CN CN201580075454.8A patent/CN107209716B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1393780A (zh) * | 2001-06-28 | 2003-01-29 | 华为技术有限公司 | 自适应动态内存管理方法 |
CN101329655A (zh) * | 2008-07-31 | 2008-12-24 | 北京天碁科技有限公司 | 一种内存管理方法和内存管理装置 |
CN101673246A (zh) * | 2009-08-06 | 2010-03-17 | 深圳市融创天下科技发展有限公司 | 一种高效的先进先出数据池读写方法 |
CN102455974A (zh) * | 2010-10-21 | 2012-05-16 | 上海宝信软件股份有限公司 | 一种内存消耗可控的高速内存申请释放管理***及方法 |
CN102063385A (zh) * | 2010-12-23 | 2011-05-18 | 深圳市金宏威实业发展有限公司 | 一种内存管理方法和*** |
CN103425592A (zh) * | 2013-08-05 | 2013-12-04 | 大唐移动通信设备有限公司 | 一种多进程***中的内存管理方法及装置 |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107766153A (zh) * | 2017-10-17 | 2018-03-06 | 华为技术有限公司 | 一种内存管理方法及装置 |
CN110858162A (zh) * | 2018-08-24 | 2020-03-03 | 华为技术有限公司 | 内存管理方法及装置、服务器 |
CN110287127A (zh) * | 2019-05-14 | 2019-09-27 | 江苏大学 | 一种多粒度多核可扩展的非易失性内存管理方法及*** |
CN110427273A (zh) * | 2019-06-25 | 2019-11-08 | 平安科技(深圳)有限公司 | 内存调度方法、装置、设备及存储介质 |
CN113467930A (zh) * | 2021-05-31 | 2021-10-01 | 翱捷科技股份有限公司 | 一种硬件管理共享内存的处理方法及装置 |
CN113467930B (zh) * | 2021-05-31 | 2023-04-14 | 翱捷科技股份有限公司 | 一种硬件管理共享内存的处理方法及装置 |
CN114296917A (zh) * | 2021-12-23 | 2022-04-08 | 中汽创智科技有限公司 | 一种内存分配方法、装置、自适应汽车开放***架构 |
Also Published As
Publication number | Publication date |
---|---|
WO2016127291A1 (zh) | 2016-08-18 |
CN107209716B (zh) | 2020-04-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107209716A (zh) | 内存管理装置和方法 | |
CN100504827C (zh) | 在次序混乱的dma命令队列中建立命令次序 | |
CN110389905B (zh) | 资源释放方法、资源分配方法、设备和计算机程序产品 | |
CN111124267B (zh) | 数据写入的方法、设备和计算机程序产品 | |
US8626955B2 (en) | Directing packets to a processor unit | |
US8359437B2 (en) | Virtual computing memory stacking | |
US20080120456A1 (en) | Method for flash memory data management | |
JP2005092875A (ja) | スレッドスケジューリングを使用してデータスループットを向上させるためのシステムおよび方法 | |
CN101178701B (zh) | 一种多处理器间通信的方法及*** | |
US20130086352A1 (en) | Dynamically configurable storage device | |
CN111124270B (zh) | 缓存管理的方法、设备和计算机程序产品 | |
CN106528065B (zh) | 一种线程获取方法及设备 | |
CN106055274A (zh) | 一种数据存储方法、数据读取方法及电子设备 | |
CN109254839A (zh) | 确定任务触发时间的方法、构建任务定时器的方法及*** | |
CN103927305A (zh) | 一种对内存溢出进行控制的方法和设备 | |
CN109976898B (zh) | 分层任务***的SPI与Eeprom异步通讯方法 | |
CN104915302B (zh) | 数据传输处理方法和数据传输器 | |
CN103092663A (zh) | 一种在终端中安装应用程序的方法及装置 | |
Zhu et al. | Energy efficient dynamic virtual optical network embedding in sliceable-transponder-equipped EONs | |
CN103164344B (zh) | 一种闪存存储设备中数据管理的方法及装置 | |
CN108287793A (zh) | 响应消息的缓冲方法及服务器 | |
CN105450679A (zh) | 进行数据云存储的方法及*** | |
CN104750425A (zh) | 一种存储***及其非易失性存储器的控制方法 | |
CN108399145B (zh) | 一种cpu-gpu异构平台共享末级缓存管理方法、架构及装置 | |
CN101561783B (zh) | 一种Cache异步淘汰的方法和装置 |
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 |