内存池构建、内存分配方法及装置制造方法及图纸

技术编号:20025137 阅读:72 留言:0更新日期:2019-01-06 04:14
本发明专利技术实施例公开了内存池构建、内存分配方法、装置、设备及存储介质。所述存池构建方法,包括:确定内存块种类及与内存块种类对应的内存块数量,根据内存块种类构建哈希节点数组;根据与内存块种类对应的内存块数量,计算与各内存块种类分别对应的内存总量,根据计算得到的内存总量申请内存;将与各内存块种类分别对应的内存划分为与内存块数量匹配的内存块,并申请与内存块对应的内存控制块与内存块相关联;将与相同内存块种类对应的内存控制块相连接,构建内存控制块链表,并将不同内存控制块链表的链表头写入对应的哈希节点中;构建红黑树。本发明专利技术实施例的方案可以防止内存资源浪费,提高内存使用率,降低检索内存控制块的时间复杂度。

【技术实现步骤摘要】
内存池构建、内存分配方法及装置
本专利技术实施例涉及计算机软件技术,尤其涉及内存池构建、内存分配方法、及装置。
技术介绍
通常我们习惯于使用new、malloc等系统原生的API(ApplicationProgrammingInterfac,应用程序编程接口)申请分配内存,这样做的缺点在于:由于不同应用程序所申请的内存块的大小不定,当频繁使用时会造成大量内存碎片并进而降低了系统性能。内存池是一种优化的内存分配方式,内存池在真正使用内存之前,先申请分配一定数量的、大小相等的内存块留作备用。当有新的内存需求时,就从内存池中分出一部分内存块,若内存不够则再申请新的内存。这样做的显著优点是,使得内存分配效率得到提升,同时因为不会频繁申请和释放内存,所以不会出现内存碎片,提高系统效率。内存池的实现方式一般采用的是拉链式的哈希表进行存储,每个哈希节点指向不同大小的内存池,每个内存池中,将大小一致的空闲内存和使用内存分别使用链表进行组织,形成空闲链表和使用链表。当申请内存时,从空闲链表获取链表节点,并将其加入使用链表中;释放内存时,将链表节点从使用链表中摘链,并加入空闲链表。随着技术的不断进步,人们对内存池的使用要求也不断提高,传统的内存池结构已经无法满足人们日益严苛的使用需求。
技术实现思路
本专利技术实施例提供了一种内存池构建、内存分配方法、装置、设备及存储介质,以实现对现有的内存池进行结构优化,提高内存池的工作性能。第一方面,本专利技术实施例提供了一种内存池构建方法,包括:确定与系统运行状态关联的至少两个内存块种类以及与所述内存块种类对应的内存块数量,并根据所述内存块种类构建哈希节点数组,其中,不同内存块种类对应不同内存块大小,不同哈希节点对应不同的内存块种类;根据与所述内存块种类对应的内存块数量,计算与各所述内存块种类分别对应的内存总量,并根据计算得到的内存总量申请内存;将与各所述内存块种类分别对应的所述内存划分为与所述内存块数量匹配的内存块,并申请与所述内存块对应的内存控制块与所述内存块相关联;将与相同内存块种类对应的内存控制块相连接,构建内存控制块链表,并将不同内存控制块链表的链表头写入对应的哈希节点中;构建红黑树,以存储与已占用内存块对应的内存控制块。第二方面,本专利技术实施例还提供了一种内存分配方法,使用通过本专利技术实施例所述的内存池构建方法所构建的内存池,包括:在获取与内存申请请求对应的目标申请内存大小后,根据所述目标申请内存大小,在所述内存池中的哈希节点数组中查找对应的第一目标哈希节点,并在所述第一目标哈希节点中获取第一目标链表头;根据所述第一目标链表头查找对应的第一目标内存控制块链表,并在所述第一目标内存控制块链表中,获取对应的第一目标内存控制块;将所述第一目标内存控制块从所述第一目标内存控制块链表中摘下后,将所述第一目标内存控制块加入红黑树中,并返回与所述第一目标内存控制块关联的第一目标内存块的地址;在获取与内存释放请求对应的内存释放地址后,将在所述红黑树中查找到的,与所述内存释放地址对应的第二目标内存控制块从所述红黑树中摘下;如果确定与内存释放地址对应的第二目标内存块不存在写越界,则在与所述第二目标内存控制块对应的第二目标哈希节点中获取第二目标链表头后,根据所述第二目标链表头查找对应的第二目标内存控制块链表,并在所述第二目标内存控制块链表中,加入所述第二目标内存控制块。第三方面,本专利技术实施例还提供了一种内存池构建装置,包括:内存块参数确定模块,用于确定与系统运行状态关联的至少两个内存块种类以及与所述内存块种类对应的内存块数量,并根据所述内存块种类构建哈希节点数组,其中,不同内存块种类对应不同内存块大小,不同哈希节点对应不同的内存块种类;内存申请模块,用于根据与所述内存块种类对应的内存块数量,计算与各所述内存块种类分别对应的内存总量,并根据计算得到的内存总量申请内存;内存控制块关联模块,用于将与各所述内存块种类分别对应的所述内存划分为与所述内存块数量匹配的内存块,并申请与所述内存块对应的内存控制块与所述内存块相关联;内存控制块链表构建模块,用于将与相同内存块种类对应的内存控制块相连接,构建内存控制块链表,并将不同内存控制块链表的链表头写入对应的哈希节点中;红黑树构建模块,用于构建红黑树,以存储与已占用内存对应的内存控制块。第四方面,本专利技术实施例还提供了一种内存分配装置,使用通过本专利技术实施例所述的内存池构建装置所建立的内存池,包括:内存申请请求处理模块,用于在获取与内存申请请求对应的目标申请内存大小后,根据所述目标申请内存大小,在所述内存池中的哈希节点数组中查找对应的第一目标哈希节点,并在所述第一目标哈希节点中获取第一目标链表头;第一目标内存控制块获取模块,用于根据所述第一目标链表头查找对应的第一目标内存控制块链表,并在所述第一目标内存控制块链表中,获取对应的第一目标内存控制块;内存块地址返回模块,用于将所述第一目标内存控制块从所述第一目标内存控制块链表中摘下后,将所述第一目标内存控制块加入红黑树中,并返回与所述第一目标内存控制块关联的第一目标内存块的地址;内存控制块摘除模块,用于在获取与内存释放请求对应的内存释放地址后,将在所述红黑树中查找到的,与所述内存释放地址对应的第二目标内存控制块从所述红黑树中摘下;第二目标内存控制块加入模块,用于如果确定与内存释放地址对应的第二目标内存块不存在写越界,则在与所述第二目标内存控制块对应的第二目标哈希节点中获取第二目标链表头后,根据所述第二目标链表头查找对应的第二目标内存控制块链表,并在所述第二目标内存控制块链表中,加入所述第二目标内存控制块。本专利技术实施例提供了内存池构建、内存分配方法、装置,在内存池构建过程中,通过预先确定与系统运行状态关联的至少两个内存块种类以及与所述内存块种类对应的内存块数量,并根据确定的内存块种类以及内存块数量构建内存池,可以尽可能避免由于内存池初始化过程中构建的内存块种类以及与内存块种类对应的内存块数量不合理,而造成的内存资源浪费的问题,提高了内存的使用率,此外,通过构建一个红黑树代替链表来存储与已占用内存块对应的内存控制块,可以降低检索对应内存控制块的时间复杂度,进一步优化了内存池的性能。附图说明图1a是本专利技术实施例一中的一种内存池构建方法的流程图;图1b是本专利技术实施例一中的一种内存块的结构示意图;图1c是本专利技术实施例一中的另一种内存块的结构示意图;图1d是本专利技术实施例一中的另一种内存块的结构示意图;图1e是本专利技术实施例一中的一种内存池中各个数据结构的组成关系的结构示意图;图2是本专利技术实施例二中的一种内存分配方法的流程图;图3是本专利技术实施例三中的一种内存池构建装置的结构图;图4是本专利技术实施例四中的一种内存分配装置的结构图;图5是本专利技术实施例五中的一种计算机设备的结构示意图。具体实施方式下面结合附图和实施例对本专利技术作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本专利技术,而非对本专利技术的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本专利技术相关的部分而非全部结构。另外还需要说明的是,为了便于描述,附图中仅示出了与本专利技术相关的部分而非全部内容。在更加详细地讨论示例性实施例之前应当提到的是,一些示例性实施例被描述成作本文档来自技高网...

【技术保护点】
1.一种内存池构建方法,其特征在于,包括:确定与系统运行状态关联的至少两个内存块种类以及与所述内存块种类对应的内存块数量,并根据所述内存块种类构建哈希节点数组,其中,不同内存块种类对应不同内存块大小,不同哈希节点对应不同的内存块种类;根据与所述内存块种类对应的内存块数量,计算与各所述内存块种类分别对应的内存总量,并根据计算得到的内存总量申请内存;将与各所述内存块种类分别对应的所述内存划分为与所述内存块数量匹配的内存块,并申请与所述内存块对应的内存控制块与所述内存块相关联;将与相同内存块种类对应的内存控制块相连接,构建内存控制块链表,并将不同内存控制块链表的链表头写入对应的哈希节点中;构建红黑树,以存储与已占用内存块对应的内存控制块。

【技术特征摘要】
1.一种内存池构建方法,其特征在于,包括:确定与系统运行状态关联的至少两个内存块种类以及与所述内存块种类对应的内存块数量,并根据所述内存块种类构建哈希节点数组,其中,不同内存块种类对应不同内存块大小,不同哈希节点对应不同的内存块种类;根据与所述内存块种类对应的内存块数量,计算与各所述内存块种类分别对应的内存总量,并根据计算得到的内存总量申请内存;将与各所述内存块种类分别对应的所述内存划分为与所述内存块数量匹配的内存块,并申请与所述内存块对应的内存控制块与所述内存块相关联;将与相同内存块种类对应的内存控制块相连接,构建内存控制块链表,并将不同内存控制块链表的链表头写入对应的哈希节点中;构建红黑树,以存储与已占用内存块对应的内存控制块。2.根据权利要求1所述的方法,其特征在于,确定与系统运行状态关联的至少两个内存块种类以及与所述内存块种类对应的内存块数量,包括:统计系统在设定时间段内,设定负载下记录的内存申请信息;根据所述内存申请信息,确定至少两个内存块种类,以及与所述内存块种类对应的内存块数量;其中,所述内存申请信息包括申请内存大小。3.根据权利要求2所述的方法,其特征在于,统计系统在设定时间段内,设定负载下记录的内存申请信息,包括:将与内存池模式对应的内存申请接口的第一申请接口函数替换为系统原生的第二申请接口函数;将与内存池模式对应的内存释放接口的第一释放接口函数替换为系统原生的第二释放接口函数;在所述第一申请接口函数中添加统计功能,用于记录所述申请内存大小;对系统在设定时间段内,设定负载下记录的所述申请内存大小的总数量进行统计;其中,所述第一申请接口函数与所述第二申请接口函数之间通过不同编译宏进行区分,所述第一释放接口函数与所述第二释放接口函数之间通过不同编译宏进行区分。4.根据权利要求1所述的方法,其特征在于,根据与所述内存块种类对应的内存块数量,计算与各所述内存块种类分别对应的内存总量,包括:依次获取一个内存块种类作为当前内存块种类;获取与所述当前内存块种类对应的初始内存块大小;根据所述初始内存块大小、链表控制信息占用的内存大小以及链表控制信息与所述初始内存块之间的保护内存块大小,计算得到实际内存块大小;根据所述实际内存块大小,以及与所述当前内存块种类对应的内存块数量,计算的得到与所述当前内存块种类对应的内存总量;返回执行依次获取一个内存块种类作为当前内存块种类的操作,直至完成对全部内存块种类的处理。5.根据权利要求4所述的方法,其特征在于,根据所述初始内存块大小、链表控制信息占用的内存大小以及链表控制信息与所述初始内存块之间的保护内存块大小,计算得到实际内存块大小,进一步包括:根据所述初始内存块大小、链表控制信息占用的内存大小、链表控制信息与所述初始内存块之间的保护内存块大小以及所述初始内存块首尾添加的魔数占用的内存大小,计算得到实际内存块大小。6.根据权利要求1-5任一项所述的方法,其特征在于,还包括:构建出错记录链表,以存储与内存使用过程中的出错内存块对应的内存控制块。7.根据权利要求6所述的方法,其特征在于,所述内存控制块包括:前向指针、后向指针、父指针、内存块存储地址、哈希节点地址以及出错诊断数据。8.一种内存分配方法,使用如权利要求1-7任一项所述的方法构建的内存池,其特征在于,包括:在获取与内存申请请求对应的目标申请内存大小后,根据所述目标申请内存大小,在所述内存池中的哈希节点数组中查找对应的第一目标哈希节点,并在所述第一目标哈希节点中获取第一目标链表头;根据所述第一目标链表头查找对应的第一目标内存控制块链表,并在所述第一目标内存控制块链表中,获取对应的第一目标内存控制块;将所述第一目标内存控制块从所述第一目标内存控制块链表中摘下后,将所述第一...

【专利技术属性】
技术研发人员:崔伟明
申请(专利权)人:北京信威通信技术股份有限公司北京瑞平通信技术有限公司
类型:发明
国别省市:北京,11

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

1