一种计算机内存管理方法、装置、设备及存储介质与流程

文档序号:26304707发布日期:2021-08-17 13:47阅读:84来源:国知局
一种计算机内存管理方法、装置、设备及存储介质与流程

本发明涉及计算机操作系统领域,尤其涉及一种计算机内存管理方法、装置、设备及存储介质领域。



背景技术:

当前嵌入式操作系统的内核堆由于存在不断的分配和释放,导致堆本身可能存在很多内存碎片,这些碎片不连续,如图1a中示出的空闲内存碎片分布。这些空闲碎片不能满足分配更大空间的需求,从而导致堆空间不能被充分使用。

分配的堆空间本身带有堆管理数据结构,实际使用的空间总是小于分配的空间,并不是全空间使用。如图1b示出的分配的内存空间结构图,分配的堆空间的起始地址包括堆管理数据结构的数据。



技术实现要素:

有鉴于此,本发明实施例提供了一种计算机内存管理方法、装置、设备及存储介质,通过梯级式的内存管理链表,对空闲内存块实现按其大小匹配的梯级存放,仅根据所需内存大小分配内存,并对物理地址相邻的空闲内存块进行归并,减少内存碎片,从而实现无损内存管理。

第一方面,本发明实施例提供了一种计算机内存管理方法,包括:配置各类型的内存管理链表,每种类型的内存管理链表包括若干梯级顺序增加的内存梯级链表,内存梯级链表的梯级越高,其存放的空闲内存块越大;根据调用的系统堆接口的类型和所需内存大小,从相应类型的内存管理链表的内存梯级链表中按照梯级查找并分配大小匹配的内存块给系统堆调用方;基于系统堆使用方类型和所释放内存大小把所释放内存加入到相应类型的内存管理链表的梯级匹配的内存梯级链表中。

由上,基于梯级分类的内存梯级链表快速查找满足所需内存大小的最小空闲内存块,且从其中只分配所需内存大小的空闲内存块,并把多余的空间存回对应梯级的内存梯级链表;把释放内存存入相应的内存梯级链表从而实现无损内存分配。

在第一方面的一种计算机内存管理方法的一种可能的实施方式中,所述配置各类型的内存管理链表包括:配置所述内存管理链表,所述内存管理链表的类型包括内核字节堆、用户字节堆和页堆,其中,内核字节堆用于计算机内核的内存分配和释放,用户字节堆用于用户程序的内存分配和释放,页堆既用于计算机内核的内存分配和释放,还用于用户程序的内存分配和释放;配置所述内存梯级链表,各类型的内存管理链表包括若干梯级的相应类型的内存梯级链表,页堆内存梯级链表的最小梯级大于内核字节堆内存梯级链表的最大梯级或用户字节堆内存梯级链表的最大梯级;在一些实施例中,所述内核字节堆内存梯级链表中存放的空闲内存块为基础内核空间的整数倍,所述基础内核空间为所述内核字节堆内存梯级链表中运行存放的最小空闲内存块,所述用户字节堆内存梯级链表中存放的空闲内存块为基础用户空间的整数倍,所述基础用户空间为所述用户字节堆内存梯级链表中允许存放的最小空闲内存块,所述页堆内存梯级链表中存放的空闲内存块为基础页堆空间的整数倍,所述基础页堆空间为所述页堆内存梯级链表中允许存放的最小空闲内存块。

由上,各梯级内核字节堆内存梯级链表和各梯级页堆内存梯级链表对应的内存空间范围依次增大,从而在为计算机内核分配内存时减少碎片产生;各梯级用户字节堆内存梯级链表和各梯级页堆内存梯级链表对应的内存空间范围依次增大,从而在为用户程序分配内存时减少碎片产生。

在第一方面的一种计算机内存管理方法的一种可能的实施方式中,所述根据调用的系统堆接口的类型和所需内存大小,从相应类型的内存管理链表的内存梯级链表中按照梯级查找并分配大小匹配的内存块给系统堆调用方,包括:基于系统堆使用方确定相应类型的内存梯级链表,并从中基于所需内存大小确定对应梯级的内存梯级链表;从所述对应梯级的内存梯级链表开始,基于梯级递增方向在相应类型的内存管理链表中查找满足需求的第一空闲内存块;基于所需内存大小,从第一空闲内存块中选择第二空闲内存块分配给系统堆调用方,第二空闲内存块为与所需内存大小梯级匹配的内存块。其中,在一些实施例中,当系统堆使用方为计算机内核时,所述梯级递增方向包括:从内核字节堆内存梯级链表的低梯级到高梯级,从内核字节堆内存梯级链表到页堆存梯级链表,从页堆存梯级链表的低梯级到高梯级。在一些实施例中,当系统堆使用方为用户程序时,所述梯级递增方向包括:从用户字节堆内存梯级链表的低梯级到高梯级,从用户字节堆内存梯级链表到页堆存梯级链表,从页堆存梯级链表的低梯级到高梯级。在一些实施例中,所述基于所需内存大小确定对应梯级的内存梯级链表,包括:当所需内存大小大于或等于基础页堆空间时,对所需内存除以所述基础页堆空间且向上取整,并以此确定为所对应梯级的页堆内存梯级链表的梯级;当所需内存大小小于基础页堆空间且调用的系统堆接口类型为内核字节堆分配接口时,对所需内存除以基础内核空间且向上取整,并以此确定为所对应梯级的内核字节堆内存梯级链表的梯级;当所需内存大小小于基础页堆空间且调用的系统堆接口类型为用户字节堆分配接口时,对所需内存除以基础用户空间且向上取整,并以此确定为所对应梯级的用户字节堆内存梯级链表的梯级。

由上,基于所需内存大小按照梯级递增方向顺序查找满足所需内存需求的空闲内存块,从而查找满足所需内存需求的最小空闲内存块,减少内存碎片的产生。仅根据系统堆使用方所需内存大小分配内存,不分配额外内存进行管理,提高内存使用效率。

在第一方面的一种计算机内存管理方法的一种可能的实施方式中,所述从相应类型的内存管理链表的内存梯级链表中按照梯级查找并分配大小匹配的内存块给系统堆调用方,还包括:当调用的系统堆接口类型为内核字节堆分配接口时,所分配的第二空闲内存块的空间不包括堆管理数据结构的大小。

由上,当调用的系统堆接口类型为内核字节堆分配接口时,无论直接通过内核字节堆内存管理链变分配所述第二空闲内存块时,或是再调用也堆分配接口通过页堆分类内存管理链变分配所述第二空闲内存块时,所分配的第二空闲内存块的空间不包括堆管理数据结构的大小,从而实现无损分配,进一步提高内存使用效率。

在第一方面的一种计算机内存管理方法的一种可能的实施方式中,基于系统堆使用方类型和所释放内存大小把所释放内存加入到相应类型的内存管理链表的梯级匹配的内存梯级链表中时,当所释放内存大于或等于基础页堆空间时,对所释放内存除以所述基础页堆空间且向上取整,并以此确定为所匹配的页堆内存梯级链表的梯级;当所释放内存小于基础页堆空间且系统堆使用方为计算机内核时,对所释放内存除以基础内核空间且向上取整,并以此确定为所匹配的内核字节堆内存梯级链表的梯级;当所释放内存小于基础页堆空间且系统堆使用方为用户程序时,对所释放内存除以基础用户空间且向上取整,并以此确定为所匹配的用户字节堆内存梯级链表的梯级。

由上,基于所释放内存大小确定相应类型内存管理链表的梯级,从而把所释放内存准确存入相应类型的所匹配的内存梯级链表中。在第一方面的一种计算机内存管理方法的一种可能的实施方式中,所述根据调用的系统堆接口的类型和所需内存大小,从相应类型的内存管理链表的内存梯级链表中按照梯级查找并分配大小匹配的内存块给系统堆调用方,还包括:分配完第二空闲内存块后,当第一空闲内存块中还存在剩余内存块时,基于所述剩余内存块的空间大小,把所述剩余内存块加入到梯级匹配的对应类型的内存梯级链表里。

由上,根据系统堆使用方所需内存大小分配内存后,把第一空闲内存块中剩余内存返还给内存管理链表,从而实现了无损内存分配。

在第一方面的一种计算机内存管理方法的一种可能的实施方式中,还包括:把内核字节堆内存管理链表中物理地址相邻空闲的内存块进行归并后存入到梯级匹配的内核字节堆内存管理链表或页堆内存管理链表中;把页堆内存管理链表中物理地址相邻空闲的内存块进行归并后存入到梯级匹配的页堆内存管理链表中。

由上,对所述内核字节堆内存管理链表或页堆内存管理链表中的相邻空闲内存块进行归并,减少了内存碎片,提高了内存使用效率。

在第一方面的一种计算机内存管理方法的一种可能的实施方式中,当调用的系统堆接口类型为用户字节堆分配接口时,所需内存大小包括堆管理数据结构的空间大小和用户程序需求内存大小;在第二空闲内存块的起始地址存入所述堆管理数据结构;其中,所述堆管理数据结构至少包括第二空闲内存块的大小和起始地址。

由上,在为用户程序分配内存时,基于用户程序所需内存大小分配,无额外分配,且当用户程序所需内存大小包括堆管理数据结构的空间时,在分配内存的起始地址存入相应的管理数据,实现与现有用户程序的兼容。

在第一方面的一种计算机内存管理方法的一种可能的实施方式中,对于系统堆使用方为用户程序时,所述把所释放内存加入到梯级匹配的所述内存梯级链表中包括:从所释获取所释放内存的堆管理数据结构,确定所释放内存的大小和地址;当所释放内存大于用户字节内存梯级链表的对应的最大内存块时,把所释放内存加到梯级匹配的页堆内存梯级链表中;当所释放内存小于或等于用户字节内存梯级链表的对应的最大内存块时,基于所释放内存的地址和大小把所释放内存加到梯级匹配的内存梯级链表里。

由上,把用户程序所释放的内存及时返还到匹配的内存管理链表中,提高内存使用效率。

在第一方面的一种计算机内存管理方法的一种可能的实施方式中,所述基于所释放内存的地址和大小把所释放内存加到梯级匹配的内存梯级链表里包括:根据所释放内存的地址确定所释放内存与所述用户字节堆内存管理链表中空闲内存块均不相邻时,把所释放内存加到梯级匹配的用户字节堆内存梯级链表里;以及当根据所释放内存的地址确定所释放内存与所述用户字节堆内存管理链表中一空闲内存块相邻时,对所释放内存与相邻的空闲内存块进行归并,生成第二释放内存,把所述第二释放内存加入到梯级匹配的内存梯级链表里。

由上,把用户程序所释放内存的相邻的空闲内存块进行归并,减少了内存碎片的产生,提高内存使用效率。

在第一方面的一种计算机内存管理方法的一种可能的实施方式中,还包括:在计算机启动时,把各可用内存块添加到梯级匹配的所述页堆内存梯级链表中。在一些实施例中,把所述可用内存块大小除以所述基础页堆空间且向上取整,并以此确定为所匹配的页堆内存梯级链表的梯级。

由上,对计算机可用内存初始化到各页堆内存梯级链表中,便于后续按需分配内存,减少内存碎片产生,提高了内存使用效率。

在第一方面的一种计算机内存管理方法的一种可能的实施方式中,所述页堆内存管理链表包括小页堆内存管理链表和大页堆内存管理链表,大页堆内存管理链表中各梯级页堆内存梯级链表中对应最小内存块空间大小均为小页堆内存梯级链表对应的最大内存块的整数倍。

由上,通过设置小页堆内存管理链表和大页堆内存管理链表,大页堆内存管理链表中各梯级页堆内存梯级链表中对应最小内存块空间大小均为小页的页堆内存梯级链表对应的最大内存块的整数倍,进一步适配不同大小的内存块管理,实现按需分配内存,减少内存碎片的产生。

在第一方面的一种计算机内存管理方法的一种可能的实施方式中,所述基于所需内存大小确定对应梯级的内存梯级链表,包括:当所需内存大小大于或等于基础页堆空间时,对所需内存除以所述基础页堆空间且向上取整,并以此确定为所对应梯级的页堆内存梯级链表的梯级;当所需内存大小小于基础页堆空间且调用的系统堆接口类型为内核字节堆分配接口时,对所需内存除以基础内核空间且向上取整,并以此确定为所述对应梯级的内核字节堆内存梯级链表的梯级;当所需内存大小小于基础页堆空间且调用的系统堆接口类型为用户字节堆分配接口时,对所需内存除以基础用户空间且向上取整,并以此确定为所述对应梯级的用户字节堆内存梯级链表的梯级;其中,所述基础内核空间为所述内核字节堆内存梯级链表中运行存放的空闲内存块,所述基础用户空间为所述用户字节堆内存梯级链表中运行存放的空闲内存块,所述基础页堆空间为所述页堆内存梯级链表中运行存放的空闲内存块。

第二方面,本发明实施例提供了一种计算机内存管理装置,包括:内存链表配置模块,配置各类型的内存管理链表,每种类型的内存管理链表包括若干梯级顺序递增的内存梯级链表,内存梯级链表的梯级越高,其存放的空闲内存块越大;所需内存分配模块,用于根据调用的系统堆接口的类型和所需内存大小从相应类型的内存管理链表的内存梯级链表中按照梯级查找并分配大小匹配的内存块给系统堆调用方;所释放内存存入模块,用于基于系统堆使用方类型和所释放内存大小把所释放内存加入到相应类型的内存管理链表的梯级匹配的内存梯级链表中。

由上,基于空闲内存块空间梯级分类的内存梯级链表,便于快速查找满足所需内存大小的最小空闲内存块,且从其中只分配所需内存大小的空闲内存块,并把多余的空间存回对应梯级的内存梯级链表;及时把释放内存存入相应的内存梯级链表,并对其中的相邻的空闲块进行归并,从而实现无损内存分配。

在第二方面的一种计算机内存管理装置的一种可能的实施方式中,内存链表配置模块具体用于配置所述内存管理链表,所述内存管理链表的类型包括内核字节堆、用户字节堆和页堆,其中,内核字节堆用于非用户程序的内存分配和释放,用户字节堆用于用户程序的内存分配和释放,页堆既用于计算机内核的内存分配和释放,还用于用户程序的内存分配和释放;还具体用于配置所述内存梯级链表,各类型的内存管理链表包括若干梯级的相应类型的内存梯级链表,页堆内存梯级链表的最小梯级大于内核字节堆内存梯级链表的最大梯级或用户字节堆内存梯级链表的最大梯级;在一些实施例中,所述内核字节堆内存梯级链表中存放的空闲内存块为基础内核空间的整数倍,所述基础内核空间为所述内核字节堆内存梯级链表中运行存放的最小空闲内存块,所述用户字节堆内存梯级链表中存放的空闲内存块为基础用户空间的整数倍,所述基础用户空间为所述用户字节堆内存梯级链表中允许存放的最小空闲内存块,所述页堆内存梯级链表中存放的空闲内存块为基础页堆空间的整数倍,所述基础页堆空间为所述页堆内存梯级链表中允许存放的最小空闲内存块。

由上,各梯级内核字节堆内存梯级链表和各梯级页堆内存梯级链表对应的内存空间范围依次增大,从而在为计算机内核分配内存时减少碎片产生;各梯级用户字节堆内存梯级链表和各梯级页堆内存梯级链表对应的内存空间范围依次增大,从而在为用户程序分配内存时减少碎片产生。

在第二方面的一种计算机内存管理装置的一种可能的实施方式中,所需内存分配模块包括:所需内存查询模块,用于基于系统堆使用方确定相应类型的内存梯级链表,并从中基于所需内存大小确定所需内存所对应梯级的内存梯级链表,从所述对应梯级的内存梯级链表开始,基于梯级递增方向在相应类型的内存管理链表中查找满足需求的第一空闲内存块;所需内存分配模块,用于基于所需内存大小,从第一空闲内存块中选择第二空闲内存块分配给系统堆调用方,第二空闲内存块为与所需内存大小梯级匹配的内存块。其中,在一些实施例中,当系统堆使用方为计算机内核时,所述梯级递增方向包括:从内核字节堆内存梯级链表的低梯级到高梯级,从内核字节堆内存梯级链表到页堆存梯级链表,从页堆存梯级链表的低梯级到高梯级。在一些实施例中,当系统堆使用方为用户程序时,所述梯级递增方向包括:从用户字节堆内存梯级链表的低梯级到高梯级,从用户字节堆内存梯级链表到页堆存梯级链表,从页堆存梯级链表的低梯级到高梯级。在一些实施例中,所需内存查询模块还具体用于:当所需内存大小大于或等于基础页堆空间时,对所需内存除以所述基础页堆空间且向上取整,并以此确定为所对应梯级的页堆内存梯级链表的梯级;当所需内存大小小于基础页堆空间且调用的系统堆接口类型为内核字节堆分配接口时,对所需内存除以基础内核空间且向上取整,并以此确定为所对应梯级的内核字节堆内存梯级链表的梯级;当所需内存大小小于基础页堆空间且调用的系统堆接口类型为用户字节堆分配接口时,对所需内存除以基础用户空间且向上取整,并以此确定为所对应梯级的用户字节堆内存梯级链表的梯级

由上,基于所需内存大小按照梯级递增方向顺序查找满足所需内存需求的空闲内存块,从而查找满足所需内存需求的最小空闲内存块,减少内存碎片的产生,提高内存使用效率。

在第二方面的一种计算机内存管理装置的一种可能的实施方式中,所需内存分配模块还用于分配完第二空闲内存块后,当第一空闲内存块中还存在剩余内存块时,基于所述剩余内存块的空间大小,把所述剩余内存块加入到梯级匹配的对应类型的内存梯级链表里。

由上,把第一空闲内存块中剩余内存返还给内存管理链表,从而实现了无损内存分配。

在第二方面的一种计算机内存管理装置的一种可能的实施方式中,所述内存分配模块在调用的系统堆接口类型为内核字节堆分配接口时,所分配的第二空闲内存块的空间不包括堆管理数据结构的大小。

由上,当调用的系统堆接口类型为内核字节堆分配接口时,无论直接通过内核字节堆内存管理链变分配所述第二空闲内存块时,或是再调用也堆分配接口通过页堆分类内存管理链变分配所述第二空闲内存块时,所分配的第二空闲内存块的空间不包括堆管理数据结构的大小,从而实现无损分配,进一步提高内存使用效率。

在第二方面的一种计算机内存管理装置的一种可能的实施方式中,还包括相邻空闲内存归并模块,其包括:内核字节堆归并模块,用于把内核字节堆内存管理链表中物理地址相邻空闲的内存块进行归并后存入到梯级匹配的内核字节堆内存管理链表或页堆内存管理链表中;页堆归并模块,用于把页堆内存管理链表中物理地址相邻空闲的内存块进行归并后存入到梯级匹配的页堆内存管理链表中。

由上,对所述内核字节堆内存管理链表或页堆内存管理链表中的相邻空闲内存块进行归并,减少了内存碎片,提高了内存使用效率。

在第二方面的一种计算机内存管理装置的一种可能的实施方式中,当调用的系统堆接口类型为用户字节堆分配接口时,所述所需内存查询模块还根据的所需内存大小包括堆管理数据结构的空间大小和用户程序需求内存大小;所述所需内存分配模块还用于在第二空闲内存块的起始地址存入所述堆管理数据结构;其中,所述堆管理数据结构至少包括第二空闲内存块的大小和起始地址。

由上,在为用户程序分配内存时,基于用户程序所需内存大小分配,无额外分配,当用户程序所需内存大小包括堆管理数据结构的空间时,在分配内存的起始地址存入相应的管理数据,实现与现有用户程序的兼容。

在第二方面的一种计算机内存管理装置的一种可能的实施方式中,所释放内存存入模块具体用于当所释放内存大于或等于基础页堆空间时,对所释放内存除以所述基础页堆空间且向上取整,并以此确定为所匹配的页堆内存梯级链表的梯级;当所释放内存小于基础页堆空间且系统堆使用方为计算机内核时,对所释放内存除以基础内核空间且向上取整,并以此确定为所匹配的内核字节堆内存梯级链表的梯级;当所释放内存小于基础页堆空间且系统堆使用方为用户程序时,对所释放内存除以基础用户空间且向上取整,并以此确定为所匹配的用户字节堆内存梯级链表的梯级。

由上,基于所释放内存大小确定相应类型内存管理链表的梯级,从而把所释放内存准确存入相应类型的所匹配的内存梯级链表中。

在第二方面的一种计算机内存管理装置的一种可能的实施方式中,对于系统堆使用方为用户程序的场景,所释放内存存入模块包括:用户程序释放内存大小获取模块,用于从所释获取所释放内存的堆管理数据结构,确定所释放内存的大小和地址;用户程序释放内存页堆存入模块,用于当所释放内存大于用户字节内存梯级链表的对应的最大内存块时,把所释放内存加到梯级匹配的页堆内存梯级链表中;用户程序释放内存内核堆存入模块,用于当所释放内存小于或等于用户字节内存梯级链表的对应的最大内存块时,基于所释放内存的地址和大小把所释放内存加到梯级匹配的内存梯级链表里。

由上,把用户程序所释放的内存及时返还到匹配的内存管理链表中,提高内存使用效率。

在第二方面的一种计算机内存管理装置的一种可能的实施方式中,用户程序释放内存内核堆存入模块具体用于基于所述所释放内存的地址确定所释放内存与所述用户字节堆内存管理链表中空闲内存块均不相邻时,把所释放内存加到梯级匹配的用户字节堆内存梯级链表里;还用于基于所述所释放内存的地址确定所释放内存与所述用户字节堆内存管理链表中一空闲内存块相邻时,对所释放内存与相邻的空闲内存块进行归并,生成第二释放内存,把所述第二释放内存加入到梯级匹配的内存梯级链表里。

由上,把用户程序所释放的内存及时返还到匹配的内存管理链表中时,对相邻的空闲内存块进行归并,减少了内存碎片的产生,提高内存使用效率。

在第二方面的一种计算机内存管理装置的一种可能的实施方式中,还包括页堆初始化模块,用于在计算机启动时,把各可用内存块添加到梯级匹配的所述页堆内存梯级链表中。在一些实施例中,把所述可用内存块大小除以所述基础页堆空间且向上取整,并以此确定为所匹配的页堆内存梯级链表的梯级。

由上,对计算机可用内存初始化到各页堆内存梯级链表中,便于后续按需分配内存,减少内存碎片产生,提高了内存使用效率。

在第二方面的一种计算机内存管理装置的一种可能的实施方式中,所述页堆内存管理链表包括小页堆内存管理链表和大页堆内存管理链表,大页堆内存管理链表中各梯级页堆内存梯级链表中对应最小内存块空间大小均为小页堆内存梯级链表对应的最大内存块的整数倍。

由上,通过设置小页堆内存管理链表和大页堆内存管理链表,大页堆内存管理链表中各梯级页堆内存梯级链表中对应最小内存块空间大小均为小页的页堆内存梯级链表对应的最大内存块的整数倍,进一步适配不同大小的内存块管理,实现按需分配内存,减少内存碎片的产生。

第三方面,本发明实施例提供了一种计算设备,包括,总线;通信接口,其与所述总线连接;至少一个处理器,其与所述总线连接;以及至少一个存储器,其与所述总线连接并存储有程序指令,所述程序指令当被所述至少一个处理器执行时使得所述至少一个处理器执行本发明第一方面任一所述实施方式。

第四方面,提供了一种计算机可读存储介质,其上存储有程序指令,所述程序指令当被计算机执行时使得所述计算机执行申请第一方面任一所述实施方式。

附图说明

图1a为背景技术中的空闲内存碎片分布示意图;

图1b为背景技术中的分配的内存空间结构示意图;

图2为本发明的一种计算机内存管理方法实施例一的流程示意图;

图3a为本发明的一种计算机内存管理方法实施例二的内存管理链表的结构示意图;

图3b为本发明的一种计算机内存管理方法实施例二的流程示意图;

图3c为本发明的一种计算机内存管理方法实施例二的页堆初始化流程的示意图;

图3d为本发明的一种计算机内存管理方法实施例二的初始化后的大页堆内存管理链表结构的示意图;

图3e为本发明的一种计算机内存管理方法实施例二的内核需求内存分配场景的流程示意图;

图3f为本发明的一种计算机内存管理方法实施例二的计算机内核内存需求场景的内核字节堆分配流程的示意图;

图3g为本发明的一种计算机内存管理方法实施例二所分配的无损内存的结构的示意图;

图4a为本发明的一种计算机内存管理方法实施例二的页堆内存分配流程的示意图;

图4b为本发明的一种计算机内存管理方法实施例二的页堆内存分配的页堆空闲内存分配流程的示意图;

图4c为本发明的一种计算机内存管理方法实施例二的内核内存释放流程的示意图;

图4d为本发明的一种计算机内存管理方法实施例二的内核字节堆归并流程的示意图;

图4e为本发明的一种计算机内存管理方法实施例二的页堆归并流程的示意图;

图5a为本发明的一种计算机内存管理方法实施例三的流程示意图;

图5b为本发明的一种计算机内存管理方法实施例三的用户程序需求内存分配场景的流程示意图;

图5c为本发明的一种计算机内存管理方法实施例三的用户程序需求内存分配场景的用户字节堆分配流程的示意图;

图5d为本发明的一种计算机内存管理方法实施例三的页堆内存分配的页堆空闲内存分配流程的示意图;

图5e为本发明的一种计算机内存管理方法实施例三的用户内存释放流程的示意图;

图6为本发明的一种计算机内存管理装置实施例一的结构示意图;

图7a为本发明的一种计算机内存管理装置实施例二的结构示意图;

图7b为本发明的一种计算机内存管理装置实施例二的页堆初始化模块的结构示意图;

图7c1为本发明的一种计算机内存管理装置实施例二的计算机内核内存需求场景的结构示意图;

图7c2为本发明的一种计算机内存管理装置实施例二的计算机内核内存需求场景的内核空闲内存分配模块的结构示意图;

图7d1为本发明的一种计算机内存管理装置实施例二的页堆内存分配模块的结构示意图;

图7d2为本发明的一种计算机内存管理装置实施例二的页堆内存分配模块的页堆空闲内存分配模块的结构示意图;

图7e为本发明的一种计算机内存管理装置实施例二的内核释放内存存入模块的结构示意图;

图7f为本发明的一种计算机内存管理装置实施例二的内核空闲内存归并模块的结构示意图;

图7g为本发明的一种计算机内存管理装置实施例二的页堆空闲内存归并模块的结构示意图;

图8a为本发明的装置实施例三的结构示意图;

图8b为本发明的一种计算机内存管理装置实施例三的用户程序需求内存分配模块的结构示意图;

图8c为本发明的一种计算机内存管理装置实施例三的用户程序需求内存分配场景的用户字节堆分配模块的结构示意图;

图8d为本发明的一种计算机内存管理装置实施例三的页堆内存分配模块的页堆空闲内存分配模块的结构示意图;

图8e为本发明的一种计算机内存管理装置实施例三的用户程序释放内存存入模块的结构示意图;

图9为本发明各实施例的一种计算设备的结构示意图。

具体实施方式

在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。

在以下的描述中,所涉及的术语“第一\第二\第三等”或模块a、模块b、模块c等,仅用于区别类似的对象,或用于区别不同的实施例,不代表针对对象的特定排序,可以理解地,在允许的情况下可以互换特定的顺序或先后次序,以使这里描述的本发明实施例能够以除了在这里图示或描述的以外的顺序实施。

在以下的描述中,所涉及的表示步骤的标号,如s110、s120……等,并不表示一定会按此步骤执行,在允许的情况下可以互换前后步骤的顺序,或同时执行。

除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本发明实施例的目的,不是旨在限制本发明。

下面结合图2至图5e介绍本发明的一种计算机内存管理各方法实施例。

【一种计算机内存管理方法实施例一】

图2示出了本发明的一种计算机内存管理方法实施例一的流程,其包括:

s110、配置各类型的内存管理链表和内存梯级链表,每种类型的内存管理链表包括若干梯级的该类型的内存梯级链表。

示例地,一类型的内存管理链表存放s个不同梯级的该类型内存梯级链表,梯级i的该类型内存梯级链表存放的空闲内存块的空间大小为si,其中,bsi-1<si≤bsi,0<bsi-1<bsi,i=1,2,…,s。

其中,所述内存管理链表的类型与系统堆使用方对应,系统堆使用方包括用户程序和计算机内核,所述计算机内核至少包括计算机内核的系统堆使用方。

s120、基于调用的系统堆接口的类型和所需内存大小,从对应类型的内存管理链表中查询满足所需内存大小的第一空闲内存块,从第一空闲内存块中分配内存给系统堆调用方。

其中,基于调用的系统堆接口的类型确定可以使用的对应类型的内存管理链表。基于所需内存大小,从所述对应类型的内存管理链表确定所需内存大小对应的内存梯级链表。从该内存梯级链表开始递增向上查找各内存梯级链表是否存在空闲内存块,即当该内存梯级链表中查询不到满足所需内存大小的空闲内存块时,则顺序从梯级相邻的较高内存梯级链表中查询,直到找到第一个空闲内存块时,则停止查找,且把该空闲内存块表示为第一空闲内存块。

其中,从第一空闲内存块中分配所需内存大小的空闲内存块分配给系统堆调用方,把剩余的内存块放入对应梯级的内存梯级链表。

由上,所述内存管理链表存放不同梯级的内存梯级链表,便于快速查找满足所需内存大小的最小空闲内存,把所述剩余的内存块放入对应梯级的内存梯级链表实现无损内存分配,从而实现按需分配。

s130、获取系统堆使用方所释放内存大小,基于所释放内存大小和调用的系统堆接口的类型,把所释放内存加入到梯级匹配的对应类型的内存梯级链表中。

由上,把所释放内存加入到梯级匹配的对应类型的内存梯级链表中,实现无损内存管理。

s140、当一类型的内存管理链表中存在相邻空闲内存块时,对所述相邻空闲内存块进行归并存入到对应的内存梯级链表中。

其中,基于所归并后的空闲内存块大小,确定其对应类型的内存梯级链表中的梯级,并存入该梯级的对应类型的内存梯级链表里。

由上,通过相邻内存规避及时合并碎片,实现无损内存管理。

综上,一种计算机内存管理方法实施例一使用基于空闲内存块空间梯级分类的内存梯级链表,便于快速查找满足所需内存大小的最小空闲内存块,且从其中只分配所需内存大小的空闲内存块,并把多余的空间存回对应梯级的内存梯级链表;及时把释放内存存入相应的内存梯级链表,并对其中的相邻的空闲块进行归并,从而实现无损内存分配。

【一种计算机内存管理方法实施例二】

一种计算机内存管理方法实施例二首先把一种计算机内存管理方法实施例一中的内存管理链表进行了优化,分为内核字节堆内存管理链表和页堆内存管理链表,并描述了如何管理这两种内存管理链表。所以一种计算机内存管理方法实施例二具有一种计算机内存管理方法实施例一的所有优点。

下面先结合图3a介绍优化后的内存管理链表。图3a示出了本发明一种计算机内存管理方法实施例二的内存管理链表的结构。

所述内存管理链表包括内核字节堆内存管理链表和页堆内存管理链表;其中,内核字节堆内存管理链表和页堆内存管理链表用于计算机内核所需内存分配,在计算机内核需求内存时,计算机内核首先调用系统堆接口中的内核字节堆接口在内核字节堆内存管理链表中申请内存,当不满足要求时,则调用系统堆接口中的页堆接口在页堆内存管理链表中申请内存。

示例地,所述内核字节堆内存管理链表包括127个不同梯级的内核字节堆内存梯级链表,每个内核字节堆内存梯级链表对应于图3a中所述内核字节堆内存管理链表中的一格,第m梯级的内核字节堆内存梯级链表存放msm空间范围的各空闲内存块的地址,其中,(m-1)*mb<msm≤m*mb,m为从1至127的整数,mb为基础内核空间,大小为32b(b代表字节,后续描述中b的含义相同)。第127梯级的内核字节堆内存梯级链表对应的空闲内存块的最大空间大小为4064b。

其中,所述页堆内存管理链表包括小页堆内存管理链表和大页堆内存管理链表,示例地,小页堆内存管理链表包括第1梯级到第256梯级的页堆内存梯级链表,大页堆内存管理链表包括第257梯级到第512梯级的页堆内存梯级链表,每个页堆内存梯级链表对应于图3a中所述大页节内存管理链表或小页节内存管理链表中的一格,pb为基础小页空间,大小为4096b(简称4kb),基础大页空间为256*4096b(简称1mb),第p梯级的页堆内存梯级链表存放psp空间范围为的各空闲内存块的地址。其中,当p=1时,4064b<ps1≤4096b;当1<p≤256时,(p-1)*pb<psp≤p*pb;当256<p≤511时,(p-1)*pb*256<psp≤p*pb*256;当p=512时,psp>511*pb*256。由上,对空闲内存块分级管理,其中各梯级内核字节堆内存梯级链表和用户字节堆内存梯级链表对应的内存空间范围步长均为32b,小页堆内存管理链表中的各梯级页堆内存梯级链表对应的内存空间范围步长为4kb,大页堆内存管理链表中的各梯级页堆内存梯级链表对应的内存空间范围步长均为1mb,步长依次增大,从而便于管理各种大小的空闲内存块。

本方法实施例描述的内存管理链表的本质是对空闲内存块分空间大小管理,不同类别和不同梯级的内存梯形链表的本实是便于不同空间变化范围的空闲内存块的管理,上述的内存管理链表只是一种基本示例,基于该示例变化的结构在本质上于本方法实施例相同,同样属于本方法实施例的保护范围。

下面介绍一种待定梯级的内存块所对应的页堆内存梯级链表的梯级的确定方法:

设待定梯级的内存块所对应的页堆内存梯级链表的梯级为pt。对待定梯级内存块的空间大小除以4kb的商向上取整,生成pa。当pa小于或等于256时,则待定梯级内存块对应的梯级位于小页堆内存管理链表范围,pt等于pa;当pa大于256时,则待定梯级内存块对应的梯级位于大页堆内存管理链表范围,pt等于pa除以256的商向上取整,且当pt大于512时,pt调整为512。

上述方法在后续会被重复使用,所述待定梯级内存块可以表示成各种内存块。

下面结合图3b至图4e介绍一种计算机内存管理方法实施例二的方法和优点。

图3b示出了一种计算机内存管理方法实施例二的流程,其包括以下步骤:

s210、在计算机启动时,把各连续可用内存添加到各所述页堆内存梯级链表中。

其中,对计算机的可用内存进行初始化管理,便于后续内存分配。本步骤的详细流程请参照一种计算机内存管理方法实施例二的页堆初始化流程。

s220、基于计算机内核所需内存大小为其分配所需内存。

其中,本步骤中从内核字节堆内存管理链表或页堆内存管理链表中选择满足要求的最小空闲内存块,实现按需分配,减少内存的碎片化。并且本步骤中为计算机内核分配内存不包括堆管理数据结构,提高内存使用效率。其中,本步骤的详细流程请参照一种计算机内存管理方法实施例二的内核需求内存分配场景的流程。

s240、把计算机内核释放的内存加入到匹配的所述内存管理链表中。

其中,本步骤中及时把计算机内核释放内存加入到相应的梯级的内核字节堆内存梯级链表或页堆内存梯级链表中,实现无损内存管理。本步骤的详细流程请参照一种计算机内存管理方法实施例二的内核内存释放流程。

示例地,s240释放的内存是s220分配的,在实际场景中,如果s240释放的内存不是s220分配的,则二者之间没有先后之分。

s260、对内核字节堆内存管理链表中相邻的内存块进行归并。

其中,对内核字节堆内存管理链表中相邻的内存块进行归并,不仅对同梯级的内核字节堆内存梯级链表中相邻的内存块进行归并,而且对不同梯级的内核字节堆内存梯级链表中相邻的内存块也进行归并,减少内存碎片化。本步骤的详细流程请参照一种计算机内存管理方法实施例二的内核字节堆归并流程。

示例地,s260是对s240释放内存后可能加入内核字节堆内存管理链表的空闲内存块进行可能的归并。实际场景中,s260是低优先级别的步骤,不一定来得及对s240释放内存及时归并,当系统不忙时才执行s260。

s270、对页堆内存管理链表中相邻的内存块进行归并。

其中,对页堆内存管理链表中相邻的内存块进行归并,不仅对同梯级的页堆内存梯级链表中相邻的内存块进行归并,而且对不同梯级的页堆内存梯级链表中相邻的内存块也进行归并,减少内存碎片化。本步骤的详细流程请参照一种计算机内存管理方法实施例二的页堆归并流程。

示例地,s270是对s240释放内存后可能加入页堆内存管理链表的空闲内存块进行可能的归并。实际场景中,s270是低优先级别的步骤,不一定来得及对s240释放内存及时归并,当系统不忙时才执行s270。

图3c示出了一种计算机内存管理方法实施例二的页堆初始化流程,包括:

s2110、获取计算机各地址连续的可用内存。

s2120、调整各所述可用内存的起始地址与页堆基础空间大小的倍数对齐,形成各第三空闲内存块。

示例地,本实施例的页堆基础空间数值为4096,本步骤中第三空闲内存块的起始地址均为4096的整数倍,便于与页堆内存管理链表管理的空闲内存块范围对齐,便于页内存管理表进行管理。

s2130、基于各第三空闲内存块的大小,把其添加到所对应的所述页堆内存梯级链表中。

其中,各第三空闲内存块所对应的页堆内存梯级链表的梯级的确定方法参照一种待定级内存块所对应的页堆内存梯级链表的梯级的确定方法,所述待定级内存块为各第三空闲内存块。

图3d示出了一种计算机内存管理方法实施例二的初始化后的大页堆内存管理链表。图中示例地给出几个页堆内存梯级链表上记录的空闲内存块。

图3e示出了一种计算机内存管理方法实施例二的内核需求内存分配场景的流程,包括以下步骤:

s2210、获取计算机内核的所需内存大小。

其中,本步骤对所需内存大小为任意粒度大小,后续需要对其进行梯级分类。

s2220、判断所需内存空间是否大于4064b,即判断所需内存是否大于内核字节堆内存管理链表允许存放的最大的空闲内存块。

其中,如果所需内存空间小于或等于4064b,则转入s2230,从内核字节堆内存梯级链表中查找空闲内存块;如所需内存空间大于4064b,则转入s2260,从页堆内存梯级链表中查找空闲内存块。

s2230、确定所需内存对应的内核字节堆内存梯级链表的梯级ma,从ma对应梯级的内核字节堆内存梯级链表开始,按照内核字节堆内存梯级链表的梯级递增方向查找满足所需内存需求的空闲的内存块。

其中,对所需内存大小除以32b的商向上取整,并表示为ma,从ma梯级的内核字节堆内存梯级链表开始查找满足所需内存需求的空闲的内存块,从而快速找到匹配的空闲的内存块,按需分配,提高内存利用效率。

s2240、判断是否找到空闲内存块,即在内核字节堆内存管理链表中是否找到空闲内存块。

其中,如果找到空闲内存块,则停止查找,转入s2250;如果查找完最大梯级的内核字节堆内存梯级链表时还未找到空闲内存块,则转入s2260,从页堆内存梯级链表中查找。

s2250、把查找到的空闲内存块确定为第一空闲内存块,从第一空闲内存块中分配内存给计算机内核。

其中,本步骤中从第一空闲内存块分配与所需内存大小匹配的内存给计算机内核,如果还存在剩余内存,并把剩余内存返还存入到所述内存管理链表中,从而实现无损内存分配。本步骤详细描述请参考一种计算机内存管理方法实施例二的内核需求内存分配场景的内核字节堆分配流程。

s2260、基于所需内存大小在各所述页堆内存梯级链表中查找和分配空闲块。

其中,本步骤应用于在内核字节堆内存管理链表未找到满足要求的空闲内存块时或所需内存大于内核字节堆内存管理链表对应的最大的空闲内存块时,从所述页堆内存梯级链表中查找和分配空闲内存块。本步骤的详细描述请参照一种计算机内存管理方法实施例二的页堆内存分配流程。

图3f示出了一种计算机内存管理方法实施例二的计算机内核内存需求场景的内核字节堆分配流程,包括:

s22510、基于所需内存大小,从第一空闲内存块中选择第二空闲内存块分配给计算机内核,所述第二空闲内存块为与所需内存大小匹配的内存块。

其中,所分配的第二空闲内存块为与所需内存大小匹配的内存块,未包括堆管理数据结构,实现了无内存块头部消耗、梯级大小的内存管理,提升内存资源的使用效率。

其中,图3g示出了一种计算机内存管理方法实施例二所分配的无损内存的结构。在图中无头部结构,即所分配内存全部能被计算机内核占用,适用于计算机内核对象管理、文件系统缓冲区、网络缓冲区以及用户应用中的固定对象和缓冲区的分配。

s22520、判断是否有剩余内存块,即分配第一空闲内存中分配完第二空闲内存块是否还有剩余内存块。

其中,分配完第二空闲内存块后,当第一空闲内存块中还存在剩余内存块时,转入s22530;否则,转入s22540。

s22530、基于所述剩余内存块的空间大小,把所述剩余内存块加入到匹配的内核字节堆内存梯级链表。

其中,所述剩余内存块的空间大小除以32b并向上取整,作为所述剩余内存块对应内核字节堆内存梯级链表的梯级,把所述剩余内存块加入到该梯级的内核字节堆内存梯级链表,从而实现了无损的内存分配。

s22540、从所述内核字节堆内存管理链表中删除第一空闲内存块。

其中,为避免在所述内核字节堆内存管理链表中地址重叠的空闲内存块,则从所述内核字节堆内存管理链表中删除第一空闲内存块。

图4a示出了一种计算机内存管理方法实施例二的页堆内存分配流程,其包括以下步骤:

s310、确定所需内存大小对应的梯级页堆内存梯级链表的梯级t。

其中,所述梯级t确定方法参照一种待定级内存块所对应的页堆内存梯级链表的梯级的确定方法,所述第待定级内存块为所需内存。

由上,本步骤基于所需内存大小确定所需内存在大页堆内存管理链表或小页堆内存管理链表中的对应的页堆内存梯级链表的梯级,便于查找与所需内存匹配的空闲块。

s320、从梯级t的页堆内存梯级链表开始按梯级增加方向查找空闲的内存块。

其中,所述从梯级t的页堆内存梯级链表开始按梯级增加方向包括在从小页堆内存管理链表自动到大页管理链表的方向。

s330、判断是否找到内存块,即判断在页堆内存管理链表中是否找到空闲内存块。

其中,当查找到空闲的内存块时,则转入s340,停止查找;如果查找完最大梯级的页堆内存梯级链表时还未找到空闲内存块,否则转入s350。

s340、把查找到的空闲内存块确定为所述第一空闲内存块,从第一空闲内存块中分配内存给系统堆调用方。

其中,本步骤中从第一空闲内存块分配与所需内存大小匹配的内存给系统堆调用方法,如果还存在剩余内存,并把剩余内存返还存入到所述内存管理链表中,从而实现无损内存分配。本步骤详细描述请参考一种计算机内存管理方法实施例二的页堆内存分配的页堆空闲内存分配的流程。

其中,为了与后文描述兼容,本步骤使用了所述系统堆使用方代理计算机内核,这是因为在后续一种计算机内存管理方法实施例三中的用户程序内存需求场景的用户字节堆分配流程同样调用一种计算机内存管理方法实施例二的页堆内存分配流程,其所述系统堆使用方为用户程序。

s350、当页堆内存管理链表中查询不到内存时输出无可用内存。

其中,因为查询完页堆内存管理链表也就查询完所有对应的可用内存块了,在页堆内存管理链表中查询不到满足需求的内存,也就是无可用内存。

图4b示出了一种计算机内存管理方法实施例二的页堆内存分配的页堆空闲内存分配流程,包括:

s3410、基于所需内存大小,从第一空闲内存块中选择第二空闲内存块分配给所述系统堆使用方。

其中,所述第二空闲内存块为与所需内存大小匹配的内存块,而不是分配整个第一空闲内存块,提高了内存使用效率。

其中,为了与后文描述兼容,本步骤使用了所述系统堆使用方代理计算机内核,这是因为在后续一种计算机内存管理方法实施例三中的用户程序内存需求场景的用户字节堆分配流程同样调用一种计算机内存管理方法实施例二的页堆内存分配流程,其所述系统堆使用方为用户程序。

s3440、判断是否有剩余内存块,即分配第一空闲内存中分配完第二空闲内存块是否还有剩余内存块。

其中,分配完第二空闲内存块后,当第一空闲内存块中还存在剩余内存块时,转入s3450;否则,转入s3480。

s3450、判断所述剩余内存块的空间是否大于4064b,即是否大于系统堆使用方对应的字节类的内存管理链表中允许存放的最大内存块。

其中,当所述剩余内存块的空间大于4064b时,转入s3460;否则,转入s3470。

s3460、基于所述剩余内存块的空间大小,把所述剩余内存块加入到匹配的页堆内存梯级链表。

其中,本步骤用于当述剩余内存块大于系统堆使用方对应的字节类的内存管理链表中允许存放的最大内存块时。

其中,确定所述剩余内存块对应的页堆内存梯级链表的梯级的方法参照一种待定级内存块所对应的页堆内存梯级链表的梯级的确定方法,所述第待定级内存块为所述剩余内存块。

s3470、基于所述剩余内存块的空间大小,把所述剩余内存块加入到系统堆使用方对应的字节类的内存梯级链表中。

其中,本步骤用于当述剩余内存块小于或等于系统堆使用方对应的字节类的内存管理链表中允许存放的最大内存块时。对所述剩余内存块除以32b向上取整,确定为对应的字节类的内存梯级链表的梯级。

其中,本方法实施例的系统堆使用方为计算机内核,基于所述剩余内存块的空间大小,把所述剩余内存块加入到匹配的内核字节堆字节链表。对于后文描述的系统堆使用方为用户程序的场景,基于所述剩余内存块的空间大小,把所述剩余内存块加入到匹配的后文所描述的用户字节堆内存梯级链表。

s3480、从所述内存管理链表中删除第一空闲内存块。

其中,为避免在所述内存管理链表中地址重叠的空闲内存块,则从所述内存管理链表中删除第一空闲内存块。

图4c示出了一种计算机内存管理方法实施例二的内核内存释放流程,包括:

s2410、获取计算机内核所释放内存大小。

其中,计算机内核所释放内存里未包括所释放内存的消息,需从计算机内核获取其所释放内存的大小。

s2420、判断所释放内存是否大于4064b,即所释放内存是否大于内核字节堆内存管理链表允许存放的最大空闲内存块。

其中,当所释放内存大于4064b时,则转入s2430,把所释放内存存入页堆内存管理链表;否则转入s2440,把所释放内存存入内核字节堆内存管理链表。

s2430、基于各所述页堆内存梯级链表对应的空间范围,确定所释放内存的梯级,并把所释放内存加到该梯级对应的所述页堆内存梯级链表中。

其中,确定所释放内存对应的页堆内存梯级链表的梯级的方法参照一种待定级内存块所对应的页堆内存梯级链表的梯级的确定方法,所述第待定级内存块为所释放内存。

其中,把所释放内存加到该梯级对应的所述页堆内存梯级链表中,便于实现按需查找所需内存,提高内存使用效率。

s2440、基于各所述内核字节堆内存梯级链表对应的空间范围,确定所释放内存的梯级,并把所释放内存加到该梯级对应的所述内核字节堆内存梯级链表中。

其中,在本步骤中对所释放内存大小除以32b的商向上取整,作为所释放内存的梯级。

其中,把所释放内存加到该梯级对应的所述内核堆梯级链表中,便于实现按需查找所需内存,提高内存使用效率。

图4d示出了一种计算机内存管理方法实施例二的内核字节堆归并流程,包括:

s2610、核查所述内核字节堆内存管理链表中是否存在相邻的内存块。

其中,本步骤不仅在同梯级的内核字节堆内存管理链表中查找相邻的内存块,也在不同梯级的内核字节堆内存管理链表中查找相邻的内存块。所述在相邻为物理地址相邻。

其中,当存在相邻空闲内存块时,则进入s2620;否则,退出内核字节堆归并流程。

s2620、把所述相邻空闲内存块进行归并,形成第四空闲内存块。

其中,对相邻的内存块进行归并,减少内存的碎片,实现无损内存管理。

s2630、判断第四空闲内存块是否大于4064b,即判断第四空闲内存块是否大于内核字节堆内存管理链表允许存入的最大内存块的空间块。

其中,当第四空闲内存块大于4064b时,则转入s2640,否则转入s2650。

s2640、基于各所述页堆内存梯级链表对应的空间范围,确定第四空闲内存块的梯级,并把第四空闲内存块加到该梯级对应的所述页堆内存梯级链表中。

其中,确定第四空闲内存块对应的页堆内存梯级链表的梯级的方法参照一种待定级内存块所对应的页堆内存梯级链表的梯级的确定方法,所述第待定级内存块为第四空闲内存块。

s2650、基于各所述内核字节堆内存梯级链表对应的空间范围,确定第四空闲内存块的梯级,并把第四空闲内存块加到该梯级对应的所述用内核节堆梯级链表中。

其中,在本步骤中对第四空闲内存块除以32b的商向上取整,作为第四空闲内存块的梯级。

s2660、从所述内核字节堆内存管理链表中删除所述相邻空闲内存块。

其中,为避免在所述内核字节堆内存管理链表中地址重叠的空闲内存块,则从所述内核字节堆内存管理链表中删除第一空闲内存块。

图4e示出了一种计算机内存管理方法实施例二的页堆归并流程,包括:

s2710、核查所述页堆内存管理链表中是否存在相邻的内存块。

其中,本步骤不仅在同梯级的页堆内存管理链表中查找相邻的内存块,也在不同梯级的页堆内存管理链表中查找相邻的内存块。所述在相邻为物理地址相邻。

其中,当存在相邻空闲内存块时,则进入s2720;否则,退出页堆归并流程。

s2720、对所述相邻空闲内存块进行归并,形成第五空闲内存块;

其中,对相邻的内存块进行归并,减少内存的碎片,实现无损内存管理。

s2730、基于各所述页堆内存梯级链表对应的空间范围,确定第五空闲内存块的梯级,并把第五空闲内存块加到该梯级对应的所述页堆内存梯级链表中。

其中,确定第五空闲内存块对应的页堆内存梯级链表的梯级的方法参照一种待定级内存块所对应的页堆内存梯级链表的梯级的确定方法,所述第待定级内存块为第五空闲内存块。

s2740、从所述页堆内存管理链表中删除所述相邻空闲内存块。

其中,为避免在所述页堆内存管理链表中地址重叠的空闲内存块,则从所述页堆内存管理链表中删除第一空闲内存块。

综上,一种计算机内存管理方法实施例二通过设置内核字节堆内存管理链表、小页堆内存管理链表和大页堆内存管理链表,按所需内存大小分配,所分配内存不包含堆管理数据结构,且对所相邻的用于同类内存链表里的空闲内存块进行归并,减少内存碎片;对内核字节堆内存管理链表、小页堆内存管理链表和大页堆内存管理链表的所对应的空闲内存块设置不同的变换步长,适合各种大小的内存块的管理,进行按需分配内存,从而实现了对用于计算机内核需求的内存的无损管理。

【一种计算机内存管理方法实施例三】

一种计算机内存管理方法实施例三在一种计算机内存管理方法实施例二的基础上增加了用户字节堆内存管理链表,以及用户程序为系统堆接口调用方时的内存分配及释放流程,具有一种计算机内存管理方法实施例二的所有优点。下面结合附图5a至5e介绍一种计算机内存管理方法实施例三新增加部分。

所述内存管理链表增加了用户字节堆内存管理链表,用户字节堆内存管理链表也是字节类的内存管理链表,只用于为用户程序所需内存分配,页堆内存管理链表也用于为用户程序所需内存分配。在用户程序需求内存时,在用户程序需求内存时,用户程序首先调用系统堆接口中的用户字节堆接口在yoghurt字节堆内存管理链表中申请内存,当不满足要求时,则调用系统堆接口中的页堆接口在页堆内存管理链表中申请内存。

所述用户字节堆内存管理链表包括127个不同梯级的用户字节堆内存梯级链表,第n梯级的用户字节堆内存梯级链表存放nsn空间范围为的各空闲内存块的地址,其中,(n-1)*nb<nsn≤n*nb,n为从1至127的整数,nb为基础用户空间,大小为32b。第127梯级的用户字节堆内存梯级链表对应的空闲内存块的最大空间大小为4064b。

本方法实施例描述的内存管理链表增加了用户字节堆内存梯级链表,本质上是为了对不同系统堆使用方的内存进行物理隔离,消除用户程序与计算机内核的内存间的影响,从而使计算机更加安全,基于上述目的增加新类别的内存管理链表与本方法实施例相同,同样属于本方法实施例的保护范围。

图5a示出了一种计算机内存管理方法实施例三的流程,对比一种计算机内存管理方法实施例二的流程,增加了以下步骤:

s230、基于用户程序所需内存大小,为用户程序分配所需内存。

其中,本步骤中从用户字节堆内存管理链表或页堆内存管理链表中选择满足要求的最小空闲内存块,实现按需分配,减少内存的碎片化,提高内存使用效率。本步骤的详细流程请参照一种计算机内存管理方法实施例三的用户程序需求内存分配场景的流程。

其中,s220和s230是并行进行的,没有先后之分。

s250、把用户程序释放的内存加入到匹配的所述内存管理链表中。

其中,本步骤中及时把用户程序释放内存加入到相应的梯级的用户字节堆内存梯级链表或页堆内存梯级链表中,实现无损内存管理。本步骤的详细流程请参照一种计算机内存管理方法实施例三的用户内存释放流程。

其中,s240和s250是并行进行的,没有先后之分。

示例地,s250释放的内存是s230分配的。在实际场景中,如果s250释放的内存不是s230分配的,则二者之间也没有先后之分。

图5b示出了一种计算机内存管理方法实施例三的用户程序需求内存分配场景的流程,其包括以下步骤:

s2310、获取用户程序的所需内存大小。

其中,其中,本步骤对所需内存大小为任意粒度大小,后续需要对其进行梯级分类。

其中,所需内存大小包括堆管理数据结构空间,堆管理数据结构的空间至少包括存储未来分配的内存大小和起始地址的空间。

s2320、判断所需内存空间是否大于4064b,即判断所需内存是否大于用户字节堆内存管理链表允许存放的最大的空闲内存块。

其中,如果所需内存空间小于或等于4064b,则转入s2330,从用户字节堆内存梯级链表中查找空闲内存块;如果所需内存空间大于4064b,则转入s2360,从页堆内存梯级链表中查找空闲内存块。

s2330、确定所需内存的梯级为na,从na对应梯级的用户字节堆内存梯级链表开始,按照用户字节堆内存梯级链表的梯级递增方向查找满足所需内存需求的空闲的内存块。

其中,对所需内存大小除以32b的商向上取整,并表示为na,从na梯级的用户字节堆内存梯级链表开始查找满足所需内存需求的空闲的内存块,从而快速找到匹配的空闲的内存块,按需分配,提高内存利用效率。

s2340、判断是否找到空闲内存块,即在用户字节堆内存管理链表中是否找到空闲内存块。

其中,如果找到空闲内存块,则停止查找,转入s2350;如果查找完最大梯级的用户字节堆内存梯级链表时还未找到空闲内存块,则转入s2360,从页堆内存梯级链表中查找。

s2350、把查询到的空闲内存块确定为所述第一空闲内存块,从第一空闲内存块中分配内存给用户程序。

其中,本步骤中从第一空闲内存块分配与所需内存大小匹配的内存分配给用户程序,如果还存在剩余内存,并把剩余内存返还存入到所述内存管理链表中,从而实现无损内存分配。本步骤详细描述请参考一种计算机内存管理方法实施例三的用户程序需求内存分配场景的用户字节堆分配流程。

s2360、基于所需内存大小在各所述页堆内存梯级链表中查找和分配空闲块。

其中,本步骤针对于在用户字节堆内存管理链表未找到满足要求的空闲内存块时或所需内存大于用户字节堆内存管理链表对应的最大的空闲内存块时,从所述页堆内存梯级链表中查找和分配空闲内存块。本步骤的详细描述请参照一种计算机内存管理方法实施例二的页堆内存分配流程。

其中,在步骤s2360调用了一种计算机内存管理方法实施例二的页堆内存分配流程,但在一种计算机内存管理方法实施例二的页堆内存分配流程的步骤s340中,调用、一种计算机内存管理方法实施例三的页堆内存分配的页堆空闲内存分配流程,对一种计算机内存管理方法实施例二的页堆内存分配的页堆空闲内存分配流程增加用户内存需求对应的部分,详细描述参照一种计算机内存管理方法实施例三的页堆内存分配的页堆空闲内存分配流程。

图5c示出了一种计算机内存管理方法实施例三的用户程序需求内存分配场景的用户字节堆分配流程,包括:

s23510、基于所需内存大小,从第一空闲内存块中选择第二空闲内存块分配给所述系统堆使用方,所述第二空闲内存块为与所需内存大小匹配的内存块。

s23520、在第二空闲内存块的起始地址存入所述堆管理数据结构。

其中,本步骤实现与已有的用户程序兼容,使已有的用户程序能够确定分配的内存大小。

s23530、判断是否有剩余内存块,即分配第一空闲内存中分配完第二空闲内存块是否还有剩余内存块。

其中,分配完第二空闲内存块后,当第一空闲内存块中还存在剩余内存块时,转入s23540;否则,转入s23550。

s23540、基于所述剩余内存块的空间大小,把所述剩余内存块加入到匹配的用户字节堆内存梯级链表。

其中,所述剩余内存块的空间大小除以32b并向上取整,作为所述剩余内存块对应用户字节堆内存梯级链表的梯级,把所述剩余内存块加入到该梯级的用户字节堆内存梯级链表,从而实现了无损的内存分配。

s23550、从所述用户字节堆内存管理链表中删除第一空闲内存块。

其中,为避免在所述用户字节堆内存管理链表中地址重叠的空闲内存块,则从所述用户字节堆内存管理链表中删除第一空闲内存块。

图5d示出了一种计算机内存管理方法实施例三的页堆内存分配的页堆空闲内存分配流程,其增加了以下步骤:

s3420、第二空闲内存块的起始地址存入堆管理数据结构。

其中,在所分配的第二空闲内存块的起始地址存入堆管理数据结构,为了当前的用户程序兼容,所述堆管理数据结构至少包括所分配的第二空闲内存块的大小和起始地址。

图5e示出了一种计算机内存管理方法实施例三的用户内存释放流程,包括:

s2510、获取用户程序所释放内存大小。

其中,用户程序所释放内存里包含所释放内存的其堆管理数据结构,从该堆管理数据结构读取所释放内存的大小和地址。

s2520、所释放内存是否大于4064b,即所释放内存是否大于用户字节堆内存管理链表允许存放的最大空闲内存块。

其中,所释放内存大于4064b,则转入s2530,把所释放内存存入页堆内存管理链表;否则转入s2540,把所释放内存存入用户字节堆内存管理链表。

s2530、基于各所述页堆内存梯级链表对应的空间范围,确定所释放内存的梯级,并把所释放内存加到该梯级对应的所述页堆内存梯级链表中。

其中,确定所释放内存对应的页堆内存梯级链表的梯级的方法参照一种待定级内存块所对应的页堆内存梯级链表的梯级的确定方法,所述第待定级内存块为所释放内存。

其中,把所释放内存加到该梯级对应的所述页堆内存梯级链表中,便于实现按需查找所需内存,提高内存使用效率。

s2540、基于所述所释放内存地址确定所释放内存是否与所述用户字节堆内存管理链表中的内存块相邻。

其中,所述在相邻为物理地址相邻。当不存在相邻的释放内存时,则转入s2550;否则转入s2560,对所释放内存与。

s2550、按照各所述用户字节堆内存梯级链表对应的空间范围,确定所释放内存的梯级,并把所释放内存加到该梯级对应的所述用户字节堆内存梯级链表。

其中,当不存在相邻释放内存时,在本步骤中对所释放内存大小除以32b的商向上取整,作为所释放内存的梯级。

s2560、把所释放内存与所述用户字节堆内存管理链表中相邻的内存块进行归并,形成第二释放内存,并从所述用户字节堆内存管理链表中删除所述相邻的内存块。

其中,当存在相邻的释放内存时,把所释放内存与所述用户字节堆内存管理链表中相邻的内存块进行归并,及时减少内存碎片,提高内存使用效率。

s2570、判断第二释放内存是否大于4064b,即判断是否大于用户字节堆内存管理链表允许存入的最大内存块。

其中,当第二释放内存大于4064b时,转入s2580,把第二释放内存存入页堆内存管理链表中;否则转入s2590,存入用户字节堆内存管理链表中。

s2580、基于各所述页堆内存梯级链表对应的空间范围,确定所述第二释放内存的梯级,并把所述第二释放内存加到该梯级对应的所述页堆内存梯级链表中。

其中,确定所述第二释放内存对应的页堆内存梯级链表的梯级的方法参照一种待定级内存块所对应的页堆内存梯级链表的梯级的确定方法,所述第待定级内存块为所述第二释放内存。

s2590、基于各所述用户字节堆内存梯级链表对应的空间范围,确定第二释放内存的梯级,并把第二释放内存加到该梯级对应的所述用户字节堆内存梯级链表中。

其中,在本步骤中对所释放内存大小除以32b的商向上取整,作为所释放内存的梯级。

其中,把所释放内存加到该梯级对应的所述内核堆梯级链表中,便于实现按需查找所需内存,提高内存使用效率。

综上,一种计算机内存管理方法实施例三在一种计算机内存管理方法实施例二的基础上增加了用户字节堆内存管理链表,基于用户字节堆内存管理链表和页堆内存管理链表实现对用户程序需求的内存按需分配,对用户程序释放的内存及时进行相邻空闲内存块的合并,减少了内存碎片,在与现有用户程序兼容的基础上,提高了内存使用效率。

下面基于图6至图8e介绍本发明的一种计算机内存管理装置实施例。

【一种计算机内存管理装置实施例一】

图6示出了一种计算机内存管理装置实施例一的结构,其包括以下模块:

内存链表配置模块610,用于配置各类型的内存管理链表和内存梯级链表,每种类型的内存管理链表包括若干梯级的内存梯级链表,梯级高的内存梯级链表存放的空闲内存块大;

所需内存分配模块620,用于根据调用的系统堆接口的类型和所需内存大小从相应类型的内存管理链表中分配大小匹配的内存块给系统堆调用方。其原理和优点请参照一种计算机内存管理方法实施例一的步骤s120。

释放内存存入模块630,用于基于系统堆使用方的类型和所释放内存大小把所释放内存加入到梯级匹配的相应类型的内存梯级链表中。其原理和优点请参照一种计算机内存管理方法实施例一的步骤s130。

相邻内存归并模块640,用于当计算机系统空闲时,对所述内存管理链表中相邻空闲内存块进行归并。其原理和优点请参照一种计算机内存管理方法实施例一的步骤s140。

综上,一种计算机内存管理装置实施例一使用基于空闲内存块空间梯级分类的内存梯级链表,便于快速查找满足所需内存大小的最小空闲内存块,且从其中只分配所需内存大小的空闲内存块,并把多余的空间存回对应梯级的内存梯级链表;及时把释放内存存入相应的内存梯级链表,并对其中的相邻的空闲块进行归并,从而实现无损内存分配。

【一种计算机内存管理装置实施例二】

图7a示出了一种计算机内存管理装置实施例二的结构,其包括以下模块:

页堆初始化模块710、用于在计算机启动时把各连续可用内存添加到各所述页堆内存梯级链表中。其原理和优点请参照一种计算机内存管理方法实施例二的步骤s210。

内核所需内存分配模块720、用于基于计算机内核所需内存大小为计算机内核分配所需内存。其原理和优点请参照一种计算机内存管理方法实施例二的步骤s220。

内核释放内存存入模块740、用于把计算机内核释放的内存加入到匹配的所述内存管理链表中。其原理和优点请参照一种计算机内存管理方法实施例二的步骤s240。

内核空闲内存归并模块760、用于对内核字节堆内存管理链表中相邻的内存块进行归并。其原理和优点请参照一种计算机内存管理方法实施例二的步骤s260。

页堆空闲内存归并模块770、用于对页堆字节堆管理链表中相邻的内存块进行归并。其原理和优点请参照一种计算机内存管理方法实施例二的步骤s270。

图7b示出了一种计算机内存管理装置实施例二的页堆初始化模块,包括:

可用内存获取模块7110、用于获取计算机各地址连续的可用内存。其原理和优点参照一种计算机内存管理方法实施例二的页堆初始化流程的步骤s2110。

可用内存对齐模块7120、用于调整各所述地址连续的可用内存的起始地址与4096的倍数对齐,形成各第三空闲内存块。其原理和优点参照一种计算机内存管理方法实施例二的页堆初始化流程的步骤s2120。

可用内存存入模块7130、用于基于各第三空闲内存块的大小,把其添加到所对应的所述页堆内存梯级链表中。其原理和优点参照一种计算机内存管理方法实施例二的页堆初始化流程的步骤s2130。

图7c1示出了一种计算机内存管理装置实施例二的计算机内核内存需求场景的结构,其包括以下模块:

内核所需内存大小获取模块7210、用于获取计算机内核的所需内存大小。其原理和优点参照一种计算机内存管理方法实施例二的内核需求内存分配场景流程的步骤s2210。

内核内存链表类型判断模块7220、用于判断所需内存是否大于4064b,即所需内存是否在内核字节堆内存管理链表允许存放空闲内存块的最大空间范围。其原理和优点参照一种计算机内存管理方法实施例二的内核需求内存分配场景流程的步骤s2230。

内核内存梯级链表确定模块7230、用于确定所需内存的梯级ma,从ma对应梯级的内核字节堆内存梯级链表开始,按照内核字节堆内存梯级链表的梯级递增方向查找满足所需内存需求的空闲的内存块。其原理和优点参照一种计算机内存管理方法实施例二的内核需求内存分配场景流程的步骤s2230。

内核空闲内存判断模块7240、用于判断是否找到空闲内存块,即判断是否在内核字节堆内存梯级链表查找到空闲内存块。其原理和优点参照一种计算机内存管理方法实施例二的内核需求内存分配场景流程的步骤s2240。

内核空闲内存分配模块7250、用于把查找到的空闲内存块确定为所述第一空闲内存块,从第一空闲内存块中分配内存给计算机内核。其原理和优点参照一种计算机内存管理方法实施例二的内核需求内存分配场景流程的步骤s2250。其模块结构参照一种计算机内存管理装置实施例二的计算机内核内存需求场景的内核空闲内存分配模块的结构。

页堆内存分配第一模块7260、用于基于所需内存大小在各所述页堆内存梯级链表中查找和分配空闲块。其原理和优点参照一种计算机内存管理方法实施例二的内核需求内存分配场景流程的步骤s2260。其模块结构参照一种计算机内存管理装置实施例二的页堆内存分配模块的结构

图7c2示出了一种计算机内存管理装置实施例二的计算机内核内存需求场景的内核空闲内存分配模块的结构,包括:

内核匹配内存分配模块72510、用于基于所需内存大小,从第一空闲内存块中选择第二空闲内存块分配给所述系统堆使用方,所述第二空闲内存块为与所需内存大小匹配的内存块。其原理和优点参照一种计算机内存管理方法实施例二的计算机内核内存需求场景的内核字节堆分配流程的步骤s22510。

剩余内存判断第一模块72520、用于判断分配完第二空闲内存块后的第一空闲内存块中还存在剩余内存块是否有剩余内存块。其原理和优点参照一种计算机内存管理方法实施例二的计算机内核内存需求场景的内核字节堆分配流程的步骤s22520。

剩余内存返还第一模块72530、用于基于所述剩余内存块的空间大小,把所述剩余内存块加入到匹配的内核字节堆内存梯级链表;从所述内核字节堆内存管理链表中删除第一空闲内存块。其原理和优点参照一种计算机内存管理方法实施例二的计算机内核内存需求场景的内核字节堆分配流程的步骤s22530。

内核分配内存删除模块722540、用于从所述内核字节堆内存管理链表中删除第一空闲内存块。其原理和优点参照一种计算机内存管理方法实施例二的计算机内核内存需求场景的内核字节堆分配流程的步骤s22540。

【一种计算机内存管理装置实施例二的页堆内存分配模块】

图7d1示出了一种计算机内存管理装置实施例二的页堆内存分配模块的结构,其包括以下子模块:

页堆内存梯级链表确定模块810、用于确定所需内存大小对应的梯级页堆内存梯级链表的梯级t。其原理和优点参照一种计算机内存管理方法实施例二的计算机内核内存需求场景的页堆内存分配流程的步骤s310。

页堆空闲内存查询模块820、用于从t对应的页堆内存梯级链表开始按梯级增加方向查找空闲的内存块。其原理和优点参照一种计算机内存管理方法实施例二的计算机内核内存需求场景的页堆内存分配流程的步骤s320。

页堆空闲内存判断模块830、用于判断在页堆内存梯级链表中是否找到内存块。其原理和优点参照一种计算机内存管理方法实施例二的计算机内核内存需求场景的页堆内存分配流程的步骤s330。

页堆空闲内存分配模块840、用于把在页堆内存梯级链表中查找到的空闲内存块确定为所述第一空闲内存块,从第一空闲内存块中分配内存给系统堆调用方。其原理和优点参照一种计算机内存管理方法实施例二的计算机内核内存需求场景的页堆内存分配流程的步骤s340。其模块结构参照一种计算机内存管理装置实施例二的页堆空闲内存分配模块的页堆空闲内存分配模块的结构。

无可用内存输出模块850、用于当在所有页堆内存梯级链表中查找不到空闲内存块时输出无可用内存。其原理和优点参照一种计算机内存管理方法实施例二的计算机内核内存需求场景的页堆内存分配流程的步骤s350。

图7d2示出了一种计算机内存管理装置实施例二的页堆内存分配模块的页堆空闲内存分配模块的结构,包括:

页堆匹配内存分配模块8410、用于基于所需内存大小,从第一空闲内存块中选择第二空闲内存块分配给所述系统堆使用方,所述第二空闲内存块为与所需内存大小匹配的内存块。其原理和优点参照一种计算机内存管理方法实施例二的页堆内存分配的页堆空闲内存分配流程中的步骤s3410。

剩余内存判断第三模块8440、用于判断从第一空闲内存块中分配完第二空闲内存块后是否有剩余内存块。其原理和优点参照一种计算机内存管理方法实施例二的页堆内存分配的页堆空闲内存分配流程中的步骤s3440。

剩余内大小存判断模块8450、用于判断所述剩余内存块的空间是否大于4064b,即是否超过内核字节堆内存管理链表或用户字节堆内存管理链表的空闲内存块的最大字节数。其原理和优点参照一种计算机内存管理方法实施例二的页堆内存分配的页堆空闲内存分配流程中的步骤s3450。

剩余内存返还第三模块8460、用于当所述剩余内存块的空间大于4064b时,基于所述剩余内存块的空间大小,把所述剩余内存块加入到匹配的页堆内存梯级链表。其原理和优点参照一种计算机内存管理方法实施例二的页堆内存分配的页堆空闲内存分配流程中的步骤s3460。

剩余内存返还第四模块8470、用户当所述剩余内存块的空间小于或等于4064b时,基于所述剩余内存块的空间大小,把所述剩余内存块加入到匹配的内核字节堆内存梯级链表或用户堆梯级链表。其原理和优点参照一种计算机内存管理方法实施例二的页堆内存分配的页堆空闲内存分配流程中的步骤s3470。

堆分配内存删除模块8480、用于从所述内存管理链表中删除第一空闲内存块。其原理和优点参照一种计算机内存管理方法实施例二的页堆内存分配的页堆空闲内存分配流程中的步骤s3480。

图7e示出了一种计算机内存管理装置实施例二的内核释放内存存入模块的结构,包括:

内核释放内存大小获取模块7410、用于获取计算机内核所释放内存大小。其原理和优点参照一种计算机内存管理方法实施例二的内核释放内存存入模块流程中的步骤s2410。

内核释放内存大小判断模块7420、用于判断所释放内存是否大于4064b,即是否大于内核字节堆内存管理链表允许存放的最大空闲内存块。其原理和优点参照一种计算机内存管理方法实施例二的内核释放内存存入模块流程中的步骤s2420。

内核释放内存页堆存入模块7430、用于当所释放内存大于内核字节堆内存管理链表允许存放的最大空闲内存块时,基于各所述页堆内存梯级链表对应的空间范围,确定所释放内存的梯级,并把所释放内存加到该梯级对应的所述页堆内存梯级链表中。其原理和优点参照一种计算机内存管理方法实施例二的内核释放内存存入模块流程中的步骤s2430。

内核释放内存内核存入模块7440、用于当所释放内存小于或等于内核字节堆内存管理链表允许存放的最大空闲内存块时,基于各所述内核字节堆内存梯级链表对应的空间范围,确定所释放内存的梯级,并把所释放内存加到该梯级对应的所述内核字节堆内存梯级链表中。其原理和优点参照一种计算机内存管理方法实施例二的内核释放内存存入模块流程中的步骤s2440。

图7f示出了一种计算机内存管理装置实施例二的内核空闲内存归并模块的结构,包括:

内核空闲相邻内存判断模块7610、用于核查所述页堆内存管理链表中是否存在相邻的内存块。其原理和优点参照一种计算机内存管理方法实施例二的内核空闲内存归并流程中的步骤s2610。

内核空闲相邻内存归并模块7620、用于把所述相邻空闲内存块进行归并,形成第四空闲内存块。其原理和优点参照一种计算机内存管理方法实施例二的内核空闲内存归并流程中的步骤s2620。

内核归并内存判断模块7630、用于判断第四空闲内存块是否大于4064b,即是否大于内核字节堆内存管理链表允许存放的最大空闲内存块。其原理和优点参照一种计算机内存管理方法实施例二的内核空闲内存归并流程中的步骤s2630。

内核归并内核存入模块7640、用于当第四空闲内存块小于或等于内核字节堆内存管理链表允许存放的最大空闲内存块基于各所述内核字节堆内存梯级链表对应的空间范围时,基于各所述页堆内存梯级链表对应的空间范围,确定第四空闲内存块的梯级,并把第四空闲内存块加到该梯级对应的所述页堆内存梯级链表中。其原理和优点参照一种计算机内存管理方法实施例二的内核空闲内存归并流程中的步骤s2640。

内核归并页堆存入模块7650、用于当第四空闲内存块大于内核字节堆内存管理链表允许存放的最大空闲内存块基于各所述内核字节堆内存梯级链表对应的空间范围时,确定第四空闲内存块的梯级,并把第四空闲内存块加到该梯级对应的所述用内核节堆梯级链表中。其原理和优点参照一种计算机内存管理方法实施例二的内核空闲内存归并流程中的步骤s2650。

内核被归并内存删除模块7660、用于从所述内核字节堆内存管理链表中删除所述相邻空闲内存块。其原理和优点参照一种计算机内存管理方法实施例二的内核空闲内存归并流程中的步骤s2660。

图7g示出了一种计算机内存管理装置实施例二的页堆空闲内存归并模块的结构,包括:

页堆空闲相邻内存判断模块7710、用于核查所述页堆内存管理链表中是否存在相邻的内存块。其原理和优点参照一种计算机内存管理方法实施例二的页堆空闲内存归并流程中的步骤s2710。

页堆空闲相邻内存归并模块7720、用于对所述相邻空闲内存块进行归并,形成第五空闲内存块。其原理和优点参照一种计算机内存管理方法实施例二的页堆空闲内存归并流程中的步骤s2720。

页堆归并内存存入模块7730、用于基于各所述页堆内存梯级链表对应的空间范围,确定第五空闲内存块的梯级,并把第五空闲内存块加到该梯级对应的所述页堆内存梯级链表中。其原理和优点参照一种计算机内存管理方法实施例二的页堆空闲内存归并流程中的步骤s2730。

页堆被归并内存删除模块7740、用于从所述页堆内存管理链表中删除所述相邻空闲内存块。其原理和优点参照一种计算机内存管理方法实施例二的页堆空闲内存归并流程中的步骤s2740。

综上,一种计算机内存管理装置实施例二通过设置内核字节堆内存管理链表、小页堆内存管理链表和大页堆内存管理链表,按所需内存大小分配,所分配内存不包含堆管理数据结构,且对所相邻的用于同类内存链表里的空闲内存块进行归并,减少内存碎片;对内核字节堆内存管理链表、小页堆内存管理链表和大页堆内存管理链表的所对应的空闲内存块设置不同的变换步长,适合各种大小的内存块的管理,进行按需分配内存,从而实现了对用于计算机内核需求的内存的无损管理。

【一种计算机内存管理装置实施例三】

图8a示出了一种计算机内存管理装置实施例三的结构,对比一种计算机内存管理装置实施例二的结构增加了以下模块:

用户程序所需内存分配模块730、用于为用户程序分配所需内存。其原理和优点参照一种计算机内存管理方法实施例三流程中的步骤s230。其模块结构参照一种计算机内存管理装置实施例三的用户程序需求内存分配模块的结构。

用户程序释放内存存入模块750、用于把用户程序所释放的内存加入到匹配的所述内存管理链表中。其原理和优点参照一种计算机内存管理方法实施例三流程中的步骤s250。其模块结构参照一种计算机内存管理装置实施例三的用户程序释放内存存入模块的结构。

图8b示出了一种计算机内存管理装置实施例三的用户程序需求内存分配模块的结构,其包括以下模块:

用户程序所需内存大小获取模块7310、用于获取用户程序的所需内存大小。其原理和优点参照一种计算机内存管理方法实施例三的用户程序需求内存分配场景流程中的步骤s2310。

用户内存链表类型判断模块7320、判断所需内存是否大于4064b,即判断用户程序的所需内存是否大于用户字节堆内存管理链表允许存放的最大空闲内存块。其原理和优点参照一种计算机内存管理方法实施例三的用户程序需求内存分配场景流程中的步骤s2320。

用户内存梯级链表确定模块7330、用于当用户程序的所需内存是小于或等于用户字节堆内存管理链表允许存放的最大空闲内存块时,确定所需内存的梯级na,从na对应梯级的用户字节堆内存梯级链表开始,按照用户字节堆内存梯级链表的梯级递增方向查找满足所需内存需求的空闲的内存块。其原理和优点参照一种计算机内存管理方法实施例三的用户程序需求内存分配场景流程中的步骤s2330。

用户程序需求空闲内存判断模块7340、用于在用户字节堆内存管理链表中判断是否找到内存块。其原理和优点参照一种计算机内存管理方法实施例三的用户程序需求内存分配场景流程中的步骤s2340。

用户程序需求内存分配模块7350、用于当在用户字节堆内存管理链表中找到空闲内存块时,把该空闲内存块确定为所述第一空闲内存块,从第一空闲内存块中分配内存给用户程序。其原理和优点参照一种计算机内存管理方法实施例三的用户程序需求内存分配场景流程中的步骤s2350。其模块结构参照一种计算机内存管理装置实施例三的用户程序需求内存分配场景的用户字节堆分配模块的结构。

页堆内存分配第三模块7360、用于基于所需内存大小在各所述页堆内存梯级链表中查找和分配空闲块。其原理和优点参照一种计算机内存管理方法实施例三的用户程序需求内存分配场景流程中的步骤s2360。其模块结构参照一种计算机内存管理装置实施例二的一种计算机内存管理装置实施例二的页堆内存分配模块的结构。

其中,在页堆内存分配第三模块7360调用了一种计算机内存管理装置实施例二的页堆内存分配模块。本装置实施例三对一种计算机内存管理装置实施例二的页堆内存分配的页堆空闲内存分配模块同时进行了增加用户内存需求对应的部分,详细描述参照一种计算机内存管理装置实施例三的页堆内存分配模块的页堆空闲内存分配模块。

图8c示出了一种计算机内存管理装置实施例三的用户程序需求内存分配场景的用户字节堆分配模块的结构,包括:

用户程序需求内存配分配模块73510、用于基于所需内存大小,从第一空闲内存块中选择第二空闲内存块分配给所述系统堆使用方,所述第二空闲内存块为与所需内存大小匹配的内存块。其原理和优点参照一种计算机内存管理方法实施例三的用户程序需求内存分配场景的用户字节堆分配流程中的步骤s23510。

堆管理数据结构存储第一模块73520、用于在第二空闲内存块的起始地址存入所述堆管理数据结构。其原理和优点参照一种计算机内存管理方法实施例三的用户程序需求内存分配场景的用户字节堆分配流程中的步骤s23520。

剩余内存判断第二模块73530、用于判断在第一空闲内存中分配完第二空闲内存块时是否有剩余内存块。其原理和优点参照一种计算机内存管理方法实施例三的用户程序需求内存分配场景的用户字节堆分配流程中的步骤s23530。

剩余内存返还第二模块73540、用于基于所述剩余内存块的空间大小,把所述剩余内存块加入到匹配的用户字节堆内存梯级链表。其原理和优点参照一种计算机内存管理方法实施例三的用户程序需求内存分配场景的用户字节堆分配流程中的步骤s23540。

用户程序查询内存删除模块73550、用于从所述用户字节堆内存管理链表中删除第一空闲内存块。其原理和优点参照一种计算机内存管理方法实施例三的用户程序需求内存分配场景的用户字节堆分配流程中的步骤s23550。

图8d示出了一种计算机内存管理装置实施例三的页堆内存分配模块的页堆空闲内存分配模块的结构,相对于一种计算机内存管理装置实施例二的页堆内存分配模块的页堆空闲内存分配模块的结构,其增加了以下子模块:

堆管理数据结构存储第二模块8420、用于当内存的使用方为用户程序时第二空闲内存块的起始地址存入堆管理数据结构。其原理和优点参照一种计算机内存管理方法实施例三的页堆内存分配的页堆空闲内存分配流程中的步骤s3420。

图8e示出了一种计算机内存管理装置实施例三的用户程序释放内存存入模块的结构,包括:

用户程序释放内存大小获取模块7510、用于获取用户程序所释放内存大小和地址。其原理和优点参照一种计算机内存管理方法实施例三的用户程序释放内存存入流程中的步骤s2510。

用户程序释放内存大小判断模块7520、用于判断所释放内存是否大于4064b,即所释放内存是否大于用户字节堆内存管理链表允许存放的最大空闲内存块。其原理和优点参照一种计算机内存管理方法实施例三的用户程序释放内存存入流程中的步骤s2520。

用户程序释放内存页堆存入模块7530、用于当所释放内存大于用户字节堆内存管理链表允许存放的最大空闲内存块时,基于各所述页堆内存梯级链表对应的空间范围,确定所释放内存的梯级,并把所释放内存加到该梯级对应的所述页堆内存梯级链表中。其原理和优点参照一种计算机内存管理方法实施例三的用户程序释放内存存入流程中的步骤s2530。

用户程序释放内存相邻判断模块7540、用于基于所述所释放内存确定所释放内存是否与所述用户字节堆内存管理链表中的内存块相邻。其原理和优点参照一种计算机内存管理方法实施例三的用户程序释放内存存入流程中的步骤s2540。

用户程序释放内存添加第一模块7550、用于按照各所述用户字节堆内存梯级链表对应的空间范围,确定所释放内存的梯级,并把所释放内存加到该梯级对应的所述用户字节堆内存梯级链表。其原理和优点参照一种计算机内存管理方法实施例三的用户程序释放内存存入流程中的步骤s2550。

用户程序释放内存归并模块7560、用于把所释放内存与所述用户字节堆内存管理链表中相邻的内存块进行归并,形成第二释放内存,并从所述用户字节堆内存管理链表中删除所述相邻的内存块。其原理和优点参照一种计算机内存管理方法实施例三的用户程序释放内存存入流程中的步骤s2560。

用户归并内存判断模块7570、用于判断第二释放内存是否大于4064b,即是否大于用户字节堆内存管理链表允许存放的最大空闲内存块。其原理和优点参照一种计算机内存管理方法实施例三的用户程序释放内存存入流程中的步骤s2570。

用户程序释放内存添加第二模块7580、用于当第二释放内存大于用户字节堆内存管理链表允许存放的最大空闲内存块时,基于各所述页堆内存梯级链表对应的空间范围,确定所述第二释放内存的梯级,并把所述第二释放内存加到该梯级对应的所述页堆内存梯级链表中。其原理和优点参照一种计算机内存管理方法实施例三的用户程序释放内存存入流程中的步骤s2580。

用户程序释放内存添加第三模块7590、用于当第二释放内存小于或等于用户字节堆内存管理链表允许存放的最大空闲内存块时,基于各所述用户字节堆内存梯级链表对应的空间范围,确定第二释放内存的梯级,并把第二释放内存加到该梯级对应的所述用户字节堆内存梯级链表中。其原理和优点参照一种计算机内存管理方法实施例三的用户程序释放内存存入流程中的步骤s2590。

综上,一种计算机内存管理装置实施例三在一种计算机内存管理装置实施例二的基础上增加了用户字节堆内存管理链表,基于用户字节堆内存管理链表和页堆内存管理链表实现对用户程序需求的内存按需分配,对用户程序释放的内存及时进行相邻空闲内存块的合并,减少了内存碎片,在与现有用户程序兼容的基础上,提高了内存使用效率。

【计算设备】

本发明还提供的一种计算设备,下面图9详细介绍。

该计算设备900包括,处理器910、存储器920、通信接口930、总线940。

应理解,该图所示的计算设备900中的通信接口930可以用于与其他设备之间进行通信。

其中,该处理器910可以与存储器920连接。该存储器920可以用于存储该程序代码和数据。因此,该存储器920可以是处理器910内部的存储单元,也可以是与处理器910独立的外部存储单元,还可以是包括处理器910内部的存储单元和与处理器910独立的外部存储单元的部件。

可选的,计算设备900还可以包括总线940。其中,存储器920、通信接口930可以通过总线940与处理器910连接。总线940可以是外设部件互连标准(peripheralcomponentinterconnect,pci)总线或扩展工业标准结构(efstendedindustrystandardarchitecture,eisa)总线等。所述总线940可以分为地址总线、数据总线、控制总线等。为便于表示,该图中仅用一条线表示,但并不表示仅有一根总线或一种类型的总线。

应理解,在本发明实施例中,该处理器910可以采用中央处理单元(centralprocessingunit,cpu)。该处理器还可以是其它通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(fieldprogrammablegatearray,fpga)或者其它可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。或者该处理器910采用一个或多个集成电路,用于执行相关程序,以实现本发明实施例所提供的技术方案。

该存储器920可以包括只读存储器和随机存取存储器,并向处理器910提供指令和数据。处理器910的一部分还可以包括非易失性随机存取存储器。例如,处理器910还可以存储设备类型的信息。

在计算设备900运行时,所述处理器910执行所述存储器920中的计算机执行指令执行各方法实施例的操作步骤。

应理解,根据本发明实施例的计算设备900可以对应于执行根据本发明各实施例的方法中的相应主体,并且计算设备900中的各个模块的上述和其它操作和/或功能分别为了实现本实施例各方法的相应流程,为了简洁,在此不再赘述。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本发明所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括,u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

【计算介质】

本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时用于执行各方法实施例的操作步骤。

本发明实施例的计算机存储介质,可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是,但不限于,电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括,具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。

计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。

计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括、但不限于无线、电线、光缆、rf等等,或者上述的任意合适的组合。

可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如java、smalltalk、c++,还包括常规的过程式程序设计语言—诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络,包括局域网(lan)或广域网(wan),连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。

注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,均属于本发明保护范畴。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1