一种内存分配的方法及装置制造方法及图纸

技术编号:12817843 阅读:84 留言:0更新日期:2016-02-07 10:22
本发明专利技术公开了一种内存分配的方法,包括:从总内存中获取一个第一内存块,所述一个第一内存块中包含多个不同大小的第二内存块;根据业务对内存的需求量,从所述一个第一内存块中确定满足所述需求量的一个第二内存块,或者,从所述总内存中获取满足所述需求量的另一个第一内存块;将所述一个第二内存块或者所述另一个第一内存块,分配给所述业务。本发明专利技术实施例提供的内存分配的方法,可以根据业务对内存的需求量,从总内存的一个第一内存块中申请合适的第二内存块,这样,就可以实现内存的并行分配,可以提高内存分配效率和内存使用率。

【技术实现步骤摘要】

本专利技术涉及计算机
,具体涉及一种内存分配的方法及装置
技术介绍
操作系统中的内存在使用时,直接从操作系统进行分配,基本不对内存进行管理,有些会进行简单的管理,但是只限于串行分配,即同一时间只能给一个请求分配内存。现有技术中的内存分配,内存分配效率低,而且也降低了内存的使用率低。
技术实现思路
本专利技术实施例提供一种内存分配的方法,可以提高内存分配效率和内存使用率。本专利技术实施例还提供了相应的装置。本专利技术第一方面提供一种内存分配的方法,包括:从总内存中获取一个第一内存块,所述一个第一内存块中包含多个不同大小的第二内存块;根据业务对内存的需求量,从所述一个第一内存块中确定满足所述需求量的一个第二内存块,或者,从所述总内存中获取满足所述需求量的另一个第一内存块;将所述一个第二内存块或者所述另一个第一内存块,分配给所述业务。本专利技术第二方面提供一种内存分配的装置,包括:获取单元,用于从总内存中获取一个第一内存块,所述一个第一内存块中包含多个不同大小的第二内存块;确定单元,用于根据业务对内存的需求量,从所述获取单元获取的所述一个第一内存块中确定满足所述需求量的一个第二内存块,或者,从所述总内存中获取满足所述需求量的另一个第一内存块;分配单元,用于将所述确定单元确定的所述一个第二内存块或者所述另一个第一内存块,分配给所述业务。本专利技术实施例米用从总内存中获取一个第一内存块,所述一个第一内存块中包含多个不同大小的第二内存块;根据业务对内存的需求量,从所述一个第一内存块中确定满足所述需求量的一个第二内存块,或者,从所述总内存中获取满足所述需求量的另一个第一内存块;将所述一个第二内存块或者所述另一个第一内存块,分配给所述业务。与现有技术中只能从总内存中申请内存块,而且每次只能申请一个内存块相比,本专利技术实施例提供的内存分配的方法,可以根据业务对内存的需求量,从总内存的一个第一内存块中申请合适的第二内存块,这样,就可以实现内存的并行分配,可以提高内存分配效率和内存使用率。【附图说明】为了更清楚地说明本专利技术实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1是本专利技术实施例中内存分配的方法的一实施例示意图;图2是本专利技术实施例中内存分配的方法的另一实施例示意图;图3是本专利技术实施例中内存分配的方法的另一实施例示意图;图4是本专利技术实施例中内存分配的方法的另一实施例示意图;图5是本专利技术实施例中内存分配的方法的另一实施例示意图;图6是本专利技术实施例中内存分配的方法的另一实施例示意图;图7是本专利技术实施例中内存分配的装置的一实施例示意图;图8是本专利技术实施例中内存分配的装置的另一实施例示意图;图9是本专利技术实施例中内存分配的装置的另一实施例示意图;图10是本专利技术实施例中内存分配的装置的另一实施例示意图;图11是本专利技术实施例中内存分配的装置的另一实施例示意图;图12是本专利技术实施例中内存分配的装置的另一实施例示意图;图13是本专利技术实施例中终端的另一实施例示意图。【具体实施方式】本专利技术实施例提供一种内存分配的方法,可以提高内存分配效率和内存使用率。本专利技术实施例还提供了相应的装置。以下分别进行详细说明。下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。本专利技术实施例提供的内存分配的方法的一实施例包括:参阅图1,本专利技术实施例中,从总内存中获取的第一内存块用Block表示,Block是较大的内存块,总内存可以为操作系统的内存,第一内存块Block中包含的第二内存块用chunk表示。Block中可以包含多个不同大小的chunk,可以理解为:Block中最小的chunk的大小为Base,其他的chunk大小按照2的指数次幂递增。当然,chunk的大小还可以按照其他策略划分。从总内存中获取的Block,可以通过Block结构串联起来,用Blocklist的形式进行管理。Blocklist为本专利技术实施例中的第一内存块链表。每个Block的内存都可以独立进行管理,一个Block中包含指针Next,指针Free和指针End。指针Next指向下一个Block,指针Free指向当前Block的空闲chunk,指针End指向Block的结束位置。初始化时可以根据Block的最小大小初始化一个Block。后面每次获取的Block都是上一次获取Block的大小的两倍,但是不超过最大Block的限制。参阅图2, chunk中包括三个部分:指针next, chunk的大小Size和信息位Info,chunk没有被业务占用时,空闲的chunk根据大小在对应的空闲链表位置通过单项链表串联起来。Chunk被分配后,指针next指向所属的分配器,在释放内存的时候也是通过这个指针来把自己放回到对应的分配器中。Size是这个Chunk的字节大小,包括业务数据和Chunk头部的三个单元的长度。信息为Info,主要存储一些校验信息,包括内存写越界的校验等。Info之后是用户的业务数据的存储的位置,返回给用户的时候通过下面的方法计算出指针的位置:chunk+sizeof (Next) +sizeof (Size) +sizeof (Info),释放内存的时候通过如下方式找到 Chunk 白勺头部:Ptr-sizeof (Next) -sizeof (Size) -sizeof (Info)。Chunk可以通过空闲链表freelist来进行管理,freelist为本专利技术实施例中的第二内存块链表。freelist中记录有该第一内存块中每个第二内存块的指针和大小信息,最小的chunk可以根据业务的需要设置基础幂指数Base,后面的chunk大小按照2的幂来递士飽>曰ο如图1和图2中所示,本专利技术实施例描述了内存分配的方法,可以对内存进行预先划分,使用时选择适合业务的block或chunk使用,从而提高了内存的分配效率核使用效率,而且在每个Block和每个Chunk中都可以设置独立的锁,避免了业务间的干扰。参阅图3,图3为本专利技术实施例中提供的内存初始化的过程示意图:S100、初始化开始。S105、获取初始block大小,最大block大小、最小Chunk大小、freelist长度等参数。初始block大小也就是第一个block的大小,可以按照初始block大小获取第一个block。最大block大小是获取block时的上限,获取的block大小最大不能超过该最大block大小的限制。最小Chunk大小为基础幂指数Base, freelist长度也就是Chunk的个数。参阅图4,本专利技术实施例提供的内存分配的方法的另一实施例包括:S200、初始化开始。初始化过程可以参阅图3部分的描述进行理解。S201、获取业务需求量。S202、判断业务对内存的需求量是否大于初始化时已申请的一个block中的最大chunk,是,执行S203,否本文档来自技高网...

【技术保护点】
一种内存分配的方法,其特征在于,包括:从总内存中获取一个第一内存块,所述一个第一内存块中包含多个不同大小的第二内存块;根据业务对内存的需求量,从所述一个第一内存块中确定满足所述需求量的一个第二内存块,或者,从所述总内存中获取满足所述需求量的另一个第一内存块;将所述一个第二内存块或者所述另一个第一内存块,分配给所述业务。

【技术特征摘要】

【专利技术属性】
技术研发人员:李跃森
申请(专利权)人:深圳市腾讯计算机系统有限公司
类型:发明
国别省市:广东;44

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

1