[发明专利]一种数据存储方法及装置有效
申请号: | 201110359449.3 | 申请日: | 2011-11-14 |
公开(公告)号: | CN102446139A | 公开(公告)日: | 2012-05-09 |
发明(设计)人: | 宋学东;黄蔚 | 申请(专利权)人: | 奇智软件(北京)有限公司 |
主分类号: | G06F12/06 | 分类号: | G06F12/06 |
代理公司: | 北京润泽恒知识产权代理有限公司 11319 | 代理人: | 苏培华 |
地址: | 100016 北京市朝阳*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 数据 存储 方法 装置 | ||
技术领域
本申请涉及内存管理技术,特别是涉及一种数据存储方法及装置。
背景技术
数据的存储可分为内存存储和文件存储。对于内存存储方式,一般采用分页存储管理机制。分页存储管理是将一个进程的逻辑空间分成若干个大小相等的片,称为页面或页,并为各页加以编号,从0开始,如第0页、第1页等。相应地,也把内存空间分成与页面相同大小的若干个存储块,称为(物理)块或页框(frame),也同样为它们加以编号,如0#块、1#块等等。
在为进程分配内存时,以块为单位将进程中的若干个页分别装入到多个可以不相邻接的物理块中。由于进程的最后一页经常装不满一块而形成了不可利用的碎片,称之为“页内碎片”。内存中因为有这些碎片的存储,大量的小内存的分配,就会引起大量的碎片,从而导致内存利用率比较低。
发明内容
本申请的目的在于,提供一种数据存储方法及装置,以解决内存利用率低的问题。
为了解决上述问题,本申请公开了一种数据存储方法,包括:
接收数据存储请求,并获得请求的数据大小M;
将请求的数据大小M与内存中当前指针指向的空闲内存块的大小N进行比较,若M小于等于N,则将该空闲内存块分配给请求数据;
若M大于N,并且内存空闲,则从内存申请大小为P的空闲内存块并分配给请求数据,其中P大于N;
若请求的数据大小M大于所述空闲内存块的大小P,则再将内存中的一个或多个可用内存块分配给M-P大小的请求数据,并将存有请求数据的所有内存块通过指针相连。
优选地,所述可用内存块为零散内存块。
优选地,所述方法还包括:将内存块的大小分级,每个级别对应一个链表,其中P对应一个级别;按照大小级别分配内存块,并将已分配的内存块分别插入对应级别的链表中。
优选地,所述从内存申请大小为P的空闲内存块并分配给请求数据,包括:若请求的数据大小M小于P,并且M符合某些小于P的级别,则将请求数据按照所选级别分拆,并从大小为P的空闲内存块中按照所选级别分割出一个或多个内存块分配给分拆后的请求数据,并将所述已分配的内存块分别插入对应级别的链表中。
优选地,所述将内存中的一个或多个可用内存块分配给M-P大小的请求数据,包括:如果内存空闲,则从内存申请大小为P的空闲内存块并分配给M-P大小的请求数据。
优选地,所述将内存中的一个或多个可用内存块分配给M-P大小的请求数据,包括:如果内存没有大小为P的空闲内存块,并且已分配的内存块中有剩余,则从已分配的一个或多个内存块中分割出剩余未用部分,作为一个或多个可用内存块分配给M-P大小的请求数据。
优选地,所述从已分配的一个或多个内存块中分割出剩余未用部分,作为一个或多个可用内存块分配给M-P大小的请求数据,包括:若从一个已分配的内存块中分割出的剩余未用部分大于等于M-P,则将该剩余未用部分作为一个可用内存块分配给M-P大小的请求数据;否则,将M-P大小的请求数据按照所选级别分拆,并从多个已分配的内存块中分割出剩余未用部分,每个剩余未用部分作为一个级别的可用内存块,分配给M-P大小的分拆后的请求数据。
优选地,所述将内存中的一个或多个可用内存块分配给M-P大小的请求数据,还包括:如果从已分配的内存块中无法分割出有效块,则根据内存块的分组排列选择最空的分组,将该分组中每个内存块的剩余未用部分进行合并,并将合并后的内存块分配给M-P大小的请求数据。
优选地,所述方法还包括:将内存中最近最少使用的内存块释放。
优选地,所述方法还包括:对请求数据进行两层配置,第一层配置采用内存存储,第二层配置采用文件存储。
本申请还提供了一种数据存储装置,包括:
请求接收模块,用于接收数据存储请求,并获得请求的数据大小M;
第一分配模块,用于将请求的数据大小M与内存中当前指针指向的空闲内存块的大小N进行比较,若M小于等于N,则将该空闲内存块分配给请求数据;
第二分配模块,用于当M大于N,并且内存空闲时,从内存申请大小为P的空闲内存块并分配给请求数据,其中P大于N;
第三分配模块,用于当请求的数据大小M大于所述空闲内存块的大小P时,再将内存中的一个或多个可用内存块分配给M-P大小的请求数据;
内存块连接模块,用于将存有请求数据的所有内存块通过指针相连。
优选地,所述可用内存块为零散内存块。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于奇智软件(北京)有限公司,未经奇智软件(北京)有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201110359449.3/2.html,转载请声明来源钻瓜专利网。
- 上一篇:用于具有长槽的物件的定位组件
- 下一篇:一种会话管理退避指示方法及网络侧装置
- 数据显示系统、数据中继设备、数据中继方法、数据系统、接收设备和数据读取方法
- 数据记录方法、数据记录装置、数据记录媒体、数据重播方法和数据重播装置
- 数据发送方法、数据发送系统、数据发送装置以及数据结构
- 数据显示系统、数据中继设备、数据中继方法及数据系统
- 数据嵌入装置、数据嵌入方法、数据提取装置及数据提取方法
- 数据管理装置、数据编辑装置、数据阅览装置、数据管理方法、数据编辑方法以及数据阅览方法
- 数据发送和数据接收设备、数据发送和数据接收方法
- 数据发送装置、数据接收装置、数据收发系统、数据发送方法、数据接收方法和数据收发方法
- 数据发送方法、数据再现方法、数据发送装置及数据再现装置
- 数据发送方法、数据再现方法、数据发送装置及数据再现装置