[发明专利]一种利用链表实现内存连续的方法和装置有效
申请号: | 201710534043.1 | 申请日: | 2017-07-03 |
公开(公告)号: | CN107329833B | 公开(公告)日: | 2021-02-19 |
发明(设计)人: | 王伟波 | 申请(专利权)人: | 苏州浪潮智能科技有限公司 |
主分类号: | G06F9/50 | 分类号: | G06F9/50;G06F12/06 |
代理公司: | 北京集佳知识产权代理有限公司 11227 | 代理人: | 罗满 |
地址: | 215100 江苏省苏州市吴*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 利用 实现 内存 连续 方法 装置 | ||
本申请公开了一种利用链表实现内存连续的方法和装置,该方法包括从操作系统申请预设数量的大块内存;利用Buffer记录所述大块内存的首地址、起始偏移量和长度,并将所述Buffer标记为unused;将所述标记为unused的Buffer按照Buffer的起始地址升序排序,利用链表组织起来,得到List‑unused;当需要利用小块内存保存数据时,从所述List‑unused的头部查找长度不小于所述小块内存长度的Buffer进行数据的保存,并标记为used,将其他部分标记为unused。上述利用链表实现内存连续的方法和装置,能够避免频繁的从操作系统申请和拷贝内存,增强系统的性能。
技术领域
本发明属于内存技术领域,特别是涉及一种利用链表实现内存连续的方法和装置。
背景技术
一个系统往往在使用过程中需要在堆中申请很多内存块用来保存数据,在一些系统(例如文件系统)中经常会将一些内存块中的数据合并之后进行处理,即多个小内存块合并成一个大的内存块。常规的做法是先申请一个大内存块,然后将多个小内存块中的数据依次拷贝到大内存块中,释放小内存块,但是,这种做法需要从操作系统中频繁的申请内存和数据拷贝,这就对系统的性能造成不利影响。
发明内容
为解决上述问题,本发明提供了一种利用链表实现内存连续的方法和装置,能够避免频繁的从操作系统申请和拷贝内存,增强系统的性能。
本发明提供的一种利用链表实现内存连续的方法,包括:
从操作系统申请预设数量的大块内存;
利用Buffer记录所述大块内存的首地址、起始偏移量和长度,并将所述Buffer标记为unused;
将所述标记为unused的Buffer按照Buffer的起始地址升序排序,利用链表组织起来,得到List-unused;
当需要利用小块内存保存数据时,从所述List-unused的头部查找长度不小于所述小块内存长度的Buffer进行数据的保存,并标记为used,将其他部分标记为unused。
优选的,在上述利用链表实现内存连续的方法中,还包括:
当需要利用多个小块内存保存数据时,将多个小块内存按照业务需要依次插入List-used中;
当所述List-used或其中的小块内存不再使用时,将所述List-used删除,或者,将所述小块内存从所述List-used中删除并标记为unused,按照Buffer的起始地址升序排序插入所述List-unused中。
优选的,在上述利用链表实现内存连续的方法中,还包括:
当所述List-unused中的相邻的Buffer具有相同的首地址,且前一个Buffer的终止地址和后一个Buffer的起始地址相等时,将二者进行合并。
优选的,在上述利用链表实现内存连续的方法中,还包括:
当大块内存不足时,从操作系统中再申请另一块大块内存,直到内存足够。
本发明提供的一种利用链表实现内存连续的装置,包括:
申请单元,用于从操作系统申请预设数量的大块内存;
记录单元,用于利用Buffer记录所述大块内存的首地址、起始偏移量和长度,并将所述Buffer标记为unused;
组织单元,用于将所述标记为unused的Buffer按照Buffer的起始地址升序排序,利用链表组织起来,得到List-unused;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于苏州浪潮智能科技有限公司,未经苏州浪潮智能科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710534043.1/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种作业管理方法及装置
- 下一篇:用于执行计算任务的方法和装置