一种堆内存管理方法、装置、设备及介质制造方法及图纸

技术编号:29788477 阅读:13 留言:0更新日期:2021-08-24 18:06
本申请公开了一种堆内存管理方法、装置、设备、介质,该方法包括:获取用户触发的堆内存申请请求;为堆内存申请请求分配对应的堆内存,并构建空闲链表的链表头,其中,空闲链表为双向链表;为堆内存映射对应的内核态内存,配置内核态内存的访问属性,以便将内核态内存作为硬件一致性内存,并将内核态内存的内核虚拟地址绑定到硬件设备驱动;在获取到申请堆内存中的内存块的内存块申请请求时,查找空闲链表中是否存在与内存块申请请求匹配的目标内存块的控制信息;如果存在,则返回目标内存块的地址信息,并将空闲链表中的所述目标内存块的控制信息删除。这样能够提高堆内存的申请和释放效率,由此提高系统的性能。

【技术实现步骤摘要】
一种堆内存管理方法、装置、设备及介质
本申请涉及存储
,特别涉及一种堆内存管理方法、装置、设备、介质。
技术介绍
在软件系统中一般都会有两种内存分配方式:栈和堆。其中,栈具有快速、安全可预测等优点,但是往往大小受限于编译器,内存利用率和灵活性较差。而堆则具有大小不受限,使用灵活,内存资源利用率高的优点。虽然堆内存具有上述多种优点,但是也存以下问题,也即,堆本身固有的缺点,也即,堆内存申请与释放本身效率较低。
技术实现思路
有鉴于此,本申请的目的在于提供一种堆内存管理方法、装置、设备、介质,能够提高堆内存的申请和释放效率,由此提高系统的性能。其具体方案如下:第一方面,本申请公开了一种堆内存管理方法,应用于异构设备,包括:获取用户触发的堆内存申请请求,其中,所述堆内存申请请求中包括堆内存的起始地址和大小,所述堆内存为用户态内存;为所述堆内存申请请求分配对应的堆内存,并构建空闲链表的链表头,其中,所述空闲链表为双向链表,用于存储所述堆内存中被申请之后释放的内存块的控制信息,且同一个空闲链表中的各个所述控制信息对应的所述内存块均有对应链表头中的属性信息对应的属性;为所述堆内存映射对应的内核态内存,配置所述内核态内存的访问属性,以便将所述内核态内存作为硬件一致性内存,并将所述内核态内存的内核虚拟地址绑定到硬件设备驱动;在获取到申请所述堆内存中的内存块的内存块申请请求时,查找所述空闲链表中是否存在与所述内存块申请请求匹配的目标内存块的控制信息;如果存在,则返回所述目标内存块的地址信息,并将所述空闲链表中的所述目标内存块的控制信息删除。可选地,所述为所述堆内存申请请求分配对应的堆内存,并构建空闲链表的链表头,包括:为所述堆内存申请请求分配对应的堆内存;根据获取到的属性信息构建空闲链表的链表头,其中,所述属性信息为内存块大小,同一个空闲链表中的各个所述控制信息对应的所述内存块的大小均相同,不同空闲链表中的所述控制信息对应的所述内存块的大小不相同。可选地,所述返回所述目标内存块的地址信息,并将所述空闲链表中的所述目标内存块的控制信息删除之前,还包括:更新存储所述目标内存块的控制信息的空闲链表的使用次数。可选地,所述查找所述空闲链表中是否存在与所述内存块申请请求匹配的目标内存块的控制信息之后,还包括:如果不存在,则从所述堆内存的起始地址开始进行全局搜索,以确定所述堆内存中是否存在未分配的与所述内存块申请请求匹配的目标内存块;如果是,则从所述堆内存中为所述内存块申请请求分配所述目标内存块,并返回所述目标内存块的地址信息。可选地,所述从所述堆内存的起始地址开始进行全局搜索,以确定所述堆内存中是否存在未分配的与所述内存块申请请求匹配的目标内存块之后,还包括:如果否,则判断所述堆内存对应的空闲链表是否均为空;如果是,则返回错误提示信息;如果否,则获取各个所述空闲链表在过去预设时长之内的使用次数信息,并将使用次数最少的非空空闲链表对应的所有内存块释放到所述堆内存中,重新执行所述从所述堆内存的起始地址开始进行全局搜索,以确定所述堆内存中是否存在未分配的与所述内存块申请请求匹配的目标内存块开始的步骤。可选地,所述返回所述目标内存块的地址信息,并将所述空闲链表中的所述目标内存块的控制信息删除之后,还包括:当所述目标内存块释放时,判断所述目标内存块是否具有所述空闲链表的链表头中的属性信息对应的属性;如果是,则将所述目标内存块的控制信息存储到对应的空闲链表中,以将所述目标内存块释放到对应的空闲链表中;如果否,则将所述目标内存释放到所述堆内存,并判断所述目标内存块的前后内存是否空闲;如果是,则进行内存碎片合并。可选地,所述为所述堆内存映射对应的内核态内存,配置所述内核态内存的访问属性,以便将所述内核态内存作为硬件一致性内存,并将所述内核态内存的内核虚拟地址绑定到硬件设备驱动,包括:在内核态获取所述堆内存对应的页表集合,并为所述页表集合映射对应的内核态虚拟地址,其中,所述内核态虚拟地址对应的内存为所述堆内存对应的内核态内存;配置所述内核态内存的访问属性,以便将所述内核态内存作为硬件一致性内存;将所述内核态内存的内核虚拟地址绑定到硬件设备驱动。第二方面,本申请公开了一种堆内存管理装置,应用于异构设备,包括:信息获取模块,用于获取用户触发的堆内存申请请求,其中,所述堆内存申请请求中包括堆内存的起始地址和大小,所述堆内存为用户态内存;堆内存初始化模块,用于为所述堆内存申请请求分配对应的堆内存,并构建空闲链表的链表头,其中,所述空闲链表为双向链表,用于存储所述堆内存中被申请之后释放的内存块的控制信息,且同一个空闲链表中的各个所述控制信息对应的所述内存块均有对应链表头中的属性信息对应的属性;所述堆内存初始化模块,用于为所述堆内存映射对应的内核态内存,配置所述内核态内存的访问属性,以便将所述内核态内存作为硬件一致性内存,并将所述内核态内存的内核虚拟地址绑定到硬件设备驱动;内存块分配模块,用于在获取到申请所述堆内存中的内存块的内存块申请请求时,查找所述空闲链表中是否存在与所述内存块申请请求匹配的目标内存块的控制信息;所述内存块分配模块,用于所述空闲链表中存在与所述内存块申请请求匹配的目标内存块的控制信息时,则返回所述目标内存块的地址信息,并将所述空闲链表中的所述目标内存块的控制信息删除。第三方面,本申请公开了一种异构设备,包括:存储器和处理器;其中,所述存储器,用于存储计算机程序;所述处理器,用于执行所述计算机程序,以实现前述公开的堆内存管理方法。第四方面,本申请公开了一种计算机可读存储介质,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现前述公开的堆内存管理方法。可见,本申请获取用户触发的堆内存申请请求,其中,所述堆内存申请请求中包括堆内存的起始地址和大小,所述堆内存为用户态内存。然后为所述堆内存申请请求分配对应的堆内存,并构建空闲链表的链表头,其中,所述空闲链表为双向链表,用于存储所述堆内存中被申请之后释放的内存块的控制信息,且同一个空闲链表中的各个所述控制信息对应的所述内存块均有对应链表头中的属性信息对应的属性。再为所述堆内存映射对应的内核态内存,配置所述内核态内存的访问属性,以便将所述内核态内存作为硬件一致性内存,并将所述内核态内存的内核虚拟地址绑定到硬件设备驱动。在获取到申请所述堆内存中的内存块的内存块申请请求时,查找所述空闲链表中是否存在与所述内存块申请请求匹配的目标内存块的控制信息,如果存在,则返回所述目标内存块的地址信息,并将所述空闲链表中的所述目标内存块的控制信息删除。由此可见,本申请在堆内存申请时便建立空闲链表的链表头,以在空闲链表中存储所述堆内存中被申请之后又释放的内存块的控制信息,然后在申请所述堆内存中的内存块时,便先对空闲链表进行遍历,优本文档来自技高网...

【技术保护点】
1.一种堆内存管理方法,其特征在于,应用于异构设备,包括:/n获取用户触发的堆内存申请请求,其中,所述堆内存申请请求中包括堆内存的起始地址和大小,所述堆内存为用户态内存;/n为所述堆内存申请请求分配对应的堆内存,并构建空闲链表的链表头,其中,所述空闲链表为双向链表,用于存储所述堆内存中被申请之后释放的内存块的控制信息,且同一个空闲链表中的各个所述控制信息对应的所述内存块均有对应链表头中的属性信息对应的属性;/n为所述堆内存映射对应的内核态内存,配置所述内核态内存的访问属性,以便将所述内核态内存作为硬件一致性内存,并将所述内核态内存的内核虚拟地址绑定到硬件设备驱动;/n在获取到申请所述堆内存中的内存块的内存块申请请求时,查找所述空闲链表中是否存在与所述内存块申请请求匹配的目标内存块的控制信息;/n如果存在,则返回所述目标内存块的地址信息,并将所述空闲链表中的所述目标内存块的控制信息删除。/n

【技术特征摘要】
1.一种堆内存管理方法,其特征在于,应用于异构设备,包括:
获取用户触发的堆内存申请请求,其中,所述堆内存申请请求中包括堆内存的起始地址和大小,所述堆内存为用户态内存;
为所述堆内存申请请求分配对应的堆内存,并构建空闲链表的链表头,其中,所述空闲链表为双向链表,用于存储所述堆内存中被申请之后释放的内存块的控制信息,且同一个空闲链表中的各个所述控制信息对应的所述内存块均有对应链表头中的属性信息对应的属性;
为所述堆内存映射对应的内核态内存,配置所述内核态内存的访问属性,以便将所述内核态内存作为硬件一致性内存,并将所述内核态内存的内核虚拟地址绑定到硬件设备驱动;
在获取到申请所述堆内存中的内存块的内存块申请请求时,查找所述空闲链表中是否存在与所述内存块申请请求匹配的目标内存块的控制信息;
如果存在,则返回所述目标内存块的地址信息,并将所述空闲链表中的所述目标内存块的控制信息删除。


2.根据权利要求1所述的堆内存管理方法,其特征在于,所述为所述堆内存申请请求分配对应的堆内存,并构建空闲链表的链表头,包括:
为所述堆内存申请请求分配对应的堆内存;
根据获取到的属性信息构建空闲链表的链表头,其中,所述属性信息为内存块大小,同一个空闲链表中的各个所述控制信息对应的所述内存块的大小均相同,不同空闲链表中的所述控制信息对应的所述内存块的大小不相同。


3.根据权利要求1所述的堆内存管理方法,其特征在于,所述返回所述目标内存块的地址信息,并将所述空闲链表中的所述目标内存块的控制信息删除之前,还包括:
更新存储所述目标内存块的控制信息的空闲链表的使用次数。


4.根据权利要求1所述的堆内存管理方法,其特征在于,所述查找所述空闲链表中是否存在与所述内存块申请请求匹配的目标内存块的控制信息之后,还包括:
如果不存在,则从所述堆内存的起始地址开始进行全局搜索,以确定所述堆内存中是否存在未分配的与所述内存块申请请求匹配的目标内存块;
如果是,则从所述堆内存中为所述内存块申请请求分配所述目标内存块,并返回所述目标内存块的地址信息。


5.根据权利要求4所述的堆内存管理方法,其特征在于,所述从所述堆内存的起始地址开始进行全局搜索,以确定所述堆内存中是否存在未分配的与所述内存块申请请求匹配的目标内存块之后,还包括:
如果否,则判断所述堆内存对应的空闲链表是否均为空;
如果是,则返回错误提示信息;
如果否,则获取各个所述空闲链表在过去预设时长之内的使用次数信息,并将使用次数最少的非空空闲链表对应的所有内存块释放到所述堆内存中,重新执行所述从所述堆内存的起始地址开始进行全局搜索,以确定所述堆内存中是否存在未分配的与所述内存块申请请求匹配的目标内存块开始的步骤。

【专利技术属性】
技术研发人员:冯唐智吴睿振崔健余洪斌
申请(专利权)人:山东云海国创云计算装备产业创新中心有限公司
类型:发明
国别省市:山东;37

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1