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

技术编号:15638988 阅读:77 留言:0更新日期:2017-06-15 20:42
本发明专利技术公开了一种内存分配方法,该方法包括以下步骤:接收目标应用程序的内存申请,内存申请中携带目标应用程序的申请内存空间的信息;根据申请内存空间,在预先获得的内存组集合中确定每个内存组需分配的内存空间,内存组集合中包含多个内存组,每个内存组中均包含多个内存块,不同内存组中的内存块可划分的内存对象的空间大小不同;根据每个内存组需分配的内存空间,在每个内存组中分配相应空间大小的内存对象给目标应用程序。应用本发明专利技术实施例所提供的技术方案,节省了内存资源,避免一页一页分配导致的内存资源的浪费,可以满足不同空间大小内存对象的年分配需求。本发明专利技术还公开了一种内存分配装置,具有相应技术效果。

【技术实现步骤摘要】
一种内存分配方法及装置
本专利技术涉及计算机
,特别是涉及一种内存分配方法及装置。
技术介绍
随着计算机技术的快速发展,Linux、Unix等操作系统的发展也越来越迅速。应用程序对内存的要求越来越高。在现有技术中,内存块大小为一页,即4096字节,当接收到应用程序的内存申请时,无论应用程序申请的内存空间有多大,都会一页一页分配内存块给应用程序。如果应用程序需要的内存空间较小,不足一页,将会导致内存资源的浪费。
技术实现思路
本专利技术的目的是提供一种内存分配方法及装置,以节省内存资源。为解决上述技术问题,本专利技术提供如下技术方案:一种内存分配方法,包括:接收目标应用程序的内存申请,所述内存申请中携带所述目标应用程序的申请内存空间的信息;根据所述申请内存空间,在预先获得的内存组集合中确定每个内存组需分配的内存空间,所述内存组集合中包含多个内存组,每个内存组中均包含多个内存块,不同内存组中的内存块可划分的内存对象的空间大小不同;根据每个内存组需分配的内存空间,在每个内存组中分配相应空间大小的内存对象给所述目标应用程序。在本专利技术的一种具体实施方式中,所述根据所述申请内存空间,在预先获得的内存组集合中确定每个内存组需分配的内存空间,包括:根据所述申请内存空间,确定多种分配方案;将每个内存组需分配的内存空间的总和最小的分配方案确定为最佳分配方案。在本专利技术的一种具体实施方式中,所述根据每个内存组需分配的内存空间,在每个内存组中分配相应空间大小的内存对象给所述目标应用程序,包括:针对每个内存组,如果该内存组需分配的内存空间不为0,则确定该内存组的全部空闲链表中是否存在全部空闲内存块;如果是,则根据该内存组需分配的内存空间,在该内存组包含的全部空闲内存块中分配相应空间大小的内存对象给所述目标应用程序。在本专利技术的一种具体实施方式中,在确定该内存组的全部空闲链表中不存在全部空间内存块时,还包括:确定该内存组的部分空闲链表中是否存在部分空闲内存块;如果是,则根据该内存组需分配的内存空间,在该内存组包含的部分空闲内存块中分配相应空间大小的内存对象给所述目标应用程序。在本专利技术的一种具体实施方式中,在确定该内存组的部分空闲链表中不存在部分空闲内存块时,还包括:在伙伴系统中申请设定数量的内存块,并将申请到的内存块放入该内存组的所述全部空闲链表中;根据该内存组需分配的内存空间,在所述全部空闲链表的内存块中分配相应空间大小的内存对象给所述目标应用程序。在本专利技术的一种具体实施方式中,还包括:针对该内存组中满负荷链表中的每个内存块,按照设定周期查询该内存块是否存在可释放的对象空间;如果是,则释放该内存块相应的对象空间;如果释放该内存块的全部对象空间,则将该内存块放入该内存组的所述全部空闲链表中;如果释放该内存块的部分对象空间,则将该内存块放入该内存组的所述部分空闲链表中。一种内存分配装置,包括:内存申请接收模块,用于接收目标应用程序的内存申请,所述内存申请中携带所述目标应用程序的申请内存空间的信息;内存空间确定模块,用于根据所述申请内存空间,在预先获得的内存组集合中确定每个内存组需分配的内存空间,所述内存组集合中包含多个内存组,每个内存组中均包含多个内存块,不同内存组中的内存块可划分的内存对象的空间大小不同;内存对象分配模块,用于根据每个内存组需分配的内存空间,在每个内存组中分配相应空间大小的内存对象给所述目标应用程序。在本专利技术的一种具体实施方式中,所述内存空间确定模块,具体用于:根据所述申请内存空间,确定多种分配方案;将每个内存组需分配的内存空间的总和最小的分配方案确定为最佳分配方案。在本专利技术的一种具体实施方式中,所述内存对象分配模块,具体用于:针对每个内存组,如果该内存组需分配的内存空间不为0,则确定该内存组的全部空闲链表中是否存在全部空闲内存块;如果是,则根据该内存组需分配的内存空间,在该内存组包含的全部空闲内存块中分配相应空间大小的内存对象给所述目标应用程序。在本专利技术的一种具体实施方式中,所述内存对象分配模块,还用于:在确定该内存组的全部空闲链表中不存在全部空间内存块时,确定该内存组的部分空闲链表中是否存在部分空闲内存块;如果是,则根据该内存组需分配的内存空间,在该内存组包含的部分空闲内存块中分配相应空间大小的内存对象给所述目标应用程序。应用本专利技术实施例所提供的技术方案,在接收到目标应用程序的内存申请时,可以从内存申请中获得目标应用程序的申请内存空间的信息,根据申请内存空间,可以在预先获得的内存组集合中确定每个内存组需分配的内存空间。内存组集合中包含多个内存组,每个内存组中均包含多个内存块,不同内存组中的内存块可划分的内存对象的空间大小不同。根据每个内存组需分配的内存空间,在每个内存组中分配相应空间大小的内存对象给目标应用程序。这样,分配给目标应用程序的内存对象的空间总和与目标应用程序的申请内存空间的大小的差值较小,节省了内存资源,避免一页一页分配导致的内存资源的浪费,可以满足不同空间大小内存对象的年分配需求。附图说明为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本专利技术实施例中一种内存分配方法的实施流程图;图2为本专利技术实施例中一种内存分配装置的结构示意图。具体实施方式为了使本
的人员更好地理解本专利技术方案,下面结合附图和具体实施方式对本专利技术作进一步的详细说明。显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。参见图1所示,为本专利技术实施例所提供的一种内存分配方法的实施流程图,该方法包括以下步骤:S110:接收目标应用程序的内存申请。内存申请中携带目标应用程序的申请内存空间的信息。在实际应用中,应用程序在运行过程中,需要进行内存申请,内存申请中携带应用程序的申请内存空间的信息。接收到目标应用个程序的内存申请时,可以从内存申请携带的信息中获知目标应用程序要申请的内存空间的大小。S120:根据申请内存空间,在预先获得的内存组集合中确定每个内存组需分配的内存空间。内存组集合中包含多个内存组,每个内存组中均包含多个内存块,不同内存组中的内存块可划分的内存对象的空间大小不同。在本专利技术实施例中,可以通过伙伴系统buddysystem申请得到一块缓存池,并将其分割为4kB大小的内存块,内存块可以是slub块、slob块或者slab块。将所有的内存块分为多个内存组,不同的内存组代表内存块可划分不同空间大小的内存对象,从而满足不同大小对象的分配需求。即内存组集合中包含多个内存组,每个内存组中均包含多个内存块,不同内存组中的内存块可划分的内存对象的空间大小不同。比如,内存组集合中共包含10个内存组,依次代表从23(8字节)~212(4096字节)不同空间大小的内存对象的可划分方式。在接收到目标应用程序的内存申请时,可以根据申请内存空间,在预先获得的内存组集合中确定每个内存组需分配的内存空间。在实际应用中,本文档来自技高网
...
一种内存分配方法及装置

【技术保护点】
一种内存分配方法,其特征在于,包括:接收目标应用程序的内存申请,所述内存申请中携带所述目标应用程序的申请内存空间的信息;根据所述申请内存空间,在预先获得的内存组集合中确定每个内存组需分配的内存空间,所述内存组集合中包含多个内存组,每个内存组中均包含多个内存块,不同内存组中的内存块可划分的内存对象的空间大小不同;根据每个内存组需分配的内存空间,在每个内存组中分配相应空间大小的内存对象给所述目标应用程序。

【技术特征摘要】
1.一种内存分配方法,其特征在于,包括:接收目标应用程序的内存申请,所述内存申请中携带所述目标应用程序的申请内存空间的信息;根据所述申请内存空间,在预先获得的内存组集合中确定每个内存组需分配的内存空间,所述内存组集合中包含多个内存组,每个内存组中均包含多个内存块,不同内存组中的内存块可划分的内存对象的空间大小不同;根据每个内存组需分配的内存空间,在每个内存组中分配相应空间大小的内存对象给所述目标应用程序。2.根据权利要求1所述的内存分配方法,其特征在于,所述根据所述申请内存空间,在预先获得的内存组集合中确定每个内存组需分配的内存空间,包括:根据所述申请内存空间,确定多种分配方案;将每个内存组需分配的内存空间的总和最小的分配方案确定为最佳分配方案。3.根据权利要求1或2所述的内存分配方法,其特征在于,所述根据每个内存组需分配的内存空间,在每个内存组中分配相应空间大小的内存对象给所述目标应用程序,包括:针对每个内存组,如果该内存组需分配的内存空间不为0,则确定该内存组的全部空闲链表中是否存在全部空闲内存块;如果是,则根据该内存组需分配的内存空间,在该内存组包含的全部空闲内存块中分配相应空间大小的内存对象给所述目标应用程序。4.根据权利要求3所述的内存分配方法,其特征在于,在确定该内存组的全部空闲链表中不存在全部空间内存块时,还包括:确定该内存组的部分空闲链表中是否存在部分空闲内存块;如果是,则根据该内存组需分配的内存空间,在该内存组包含的部分空闲内存块中分配相应空间大小的内存对象给所述目标应用程序。5.根据权利要求4所述的内存分配方法,其特征在于,在确定该内存组的部分空闲链表中不存在部分空闲内存块时,还包括:在伙伴系统中申请设定数量的内存块,并将申请到的内存块放入该内存组的所述全部空闲链表中;根据该内存组需分配的内存空间,在所述全部空闲链表的内存块中分配相应空间大小的内存对象给所述目标应用程序。6...

【专利技术属性】
技术研发人员:邓宇羽
申请(专利权)人:郑州云海信息技术有限公司
类型:发明
国别省市:河南,41

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

1