【技术实现步骤摘要】
一种堆内存管理方法、装置、设备及介质
本申请涉及存储
,特别涉及一种堆内存管理方法、装置、设备、介质。
技术介绍
在软件系统中一般都会有两种内存分配方式:栈和堆。其中,栈具有快速、安全可预测等优点,但是往往大小受限于编译器,内存利用率和灵活性较差。而堆则具有大小不受限,使用灵活,内存资源利用率高的优点。虽然堆内存具有上述多种优点,但是也存以下问题,也即,堆本身固有的缺点,也即,堆内存申请与释放本身效率较低。
技术实现思路
有鉴于此,本申请的目的在于提供一种堆内存管理方法、装置、设备、介质,能够提高堆内存的申请和释放效率,由此提高系统的性能。其具体方案如下:第一方面,本申请公开了一种堆内存管理方法,应用于异构设备,包括:获取用户触发的堆内存申请请求,其中,所述堆内存申请请求中包括堆内存的起始地址和大小,所述堆内存为用户态内存;为所述堆内存申请请求分配对应的堆内存,并构建空闲链表的链表头,其中,所述空闲链表为双向链表,用于存储所述堆内存中被申请之后释放的内存块的控制信息,且同一个空闲链表中的各个所述控制信息对应的所述内存块均有对应链表头中的属性信息对应的属性;为所述堆内存映射对应的内核态内存,配置所述内核态内存的访问属性,以便将所述内核态内存作为硬件一致性内存,并将所述内核态内存的内核虚拟地址绑定到硬件设备驱动;在获取到申请所述堆内存中的内存块的内存块申请请求时,查找所述空闲链表中是否存在与所述内存块申请请求匹配的目标内存块的控制信息;如果存在,则 ...
【技术保护点】
1.一种堆内存管理方法,其特征在于,应用于异构设备,包括:/n获取用户触发的堆内存申请请求,其中,所述堆内存申请请求中包括堆内存的起始地址和大小,所述堆内存为用户态内存;/n为所述堆内存申请请求分配对应的堆内存,并构建空闲链表的链表头,其中,所述空闲链表为双向链表,用于存储所述堆内存中被申请之后释放的内存块的控制信息,且同一个空闲链表中的各个所述控制信息对应的所述内存块均有对应链表头中的属性信息对应的属性;/n为所述堆内存映射对应的内核态内存,配置所述内核态内存的访问属性,以便将所述内核态内存作为硬件一致性内存,并将所述内核态内存的内核虚拟地址绑定到硬件设备驱动;/n在获取到申请所述堆内存中的内存块的内存块申请请求时,查找所述空闲链表中是否存在与所述内存块申请请求匹配的目标内存块的控制信息;/n如果存在,则返回所述目标内存块的地址信息,并将所述空闲链表中的所述目标内存块的控制信息删除。/n
【技术特征摘要】 【专利技术属性】
1.一种堆内存管理方法,其特征在于,应用于异构设备,包括:
获取用户触发的堆内存申请请求,其中,所述堆内存申请请求中包括堆内存的起始地址和大小,所述堆内存为用户态内存;
为所述堆内存申请请求分配对应的堆内存,并构建空闲链表的链表头,其中,所述空闲链表为双向链表,用于存储所述堆内存中被申请之后释放的内存块的控制信息,且同一个空闲链表中的各个所述控制信息对应的所述内存块均有对应链表头中的属性信息对应的属性;
为所述堆内存映射对应的内核态内存,配置所述内核态内存的访问属性,以便将所述内核态内存作为硬件一致性内存,并将所述内核态内存的内核虚拟地址绑定到硬件设备驱动;
在获取到申请所述堆内存中的内存块的内存块申请请求时,查找所述空闲链表中是否存在与所述内存块申请请求匹配的目标内存块的控制信息;
如果存在,则返回所述目标内存块的地址信息,并将所述空闲链表中的所述目标内存块的控制信息删除。
2.根据权利要求1所述的堆内存管理方法,其特征在于,所述为所述堆内存申请请求分配对应的堆内存,并构建空闲链表的链表头,包括:
为所述堆内存申请请求分配对应的堆内存;
根据获取到的属性信息构建空闲链表的链表头,其中,所述属性信息为内存块大小,同一个空闲链表中的各个所述控制信息对应的所述内存块的大小均相同,不同空闲链表中的所述控制信息对应的所述内存块的大小不相同。
3.根据权利要求1所述的堆内存管理方法,其特征在于,所述返回所述目标内存块的地址信息,并将所述空闲链表中的所述目标内存块的控制信息删除之前,还包括:
更新存储所述目标内存块的控制信息的空闲链表的使用次数。
4.根据权利要求1所述的堆内存管理方法,其特征在于,所述查找所述空闲链表中是否存在与所述内存块申请请求匹配的目标内存块的控制信息之后,还包括:
如果不存在,则从所述堆内存的起始地址开始进行全局搜索,以确定所述堆内存中是否存在未分配的与所述内存块申请请求匹配的目标内存块;
如果是,则从所述堆内存中为所述内存块申请请求分配所述目标内存块,并返回所述目标内存块的地址信息。
5.根据权利要求4所述的堆内存管理方法,其特征在于,所述从所述堆内存的起始地址开始进行全局搜索,以确定所述堆内存中是否存在未分配的与所述内存块申请请求匹配的目标内存块之后,还包括:
如果否,则判断所述堆内存对应的空闲链表是否均为空;
如果是,则返回错误提示信息;
如果否,则获取各个所述空闲链表在过去预设时长之内的使用次数信息,并将使用次数最少的非空空闲链表对应的所有内存块释放到所述堆内存中,重新执行所述从所述堆内存的起始地址开始进行全局搜索,以确定所述堆内存中是否存在未分配的与所述内存块申请请求匹配的目标内存块开始的步骤。
技术研发人员:冯唐智,吴睿振,崔健,余洪斌,
申请(专利权)人:山东云海国创云计算装备产业创新中心有限公司,
类型:发明
国别省市:山东;37
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。