内存池管理方法技术

技术编号:13200816 阅读:62 留言:0更新日期:2016-05-12 10:15
本发明专利技术提供了一种内存池管理方法,包括:将内存池划分为多个大小不同的次级内存池,各个次级内存池按照不同的对齐长度对应不同的内存链表;根据需要的内存空间的大小选择次级内存池,按照与所选择的次级内存池对应的对齐长度分配内存;在分配的内存空间前加一头结构,所述头结构用于记录所述分配的内存空间的大小以及使用状态。每个链表都是独立线程安全的,同步颗粒更小,相应减少了同步,提高了分配性能。并通过所述头结构中的值来判断内存使用的合法性,生成调用堆栈,并记录日志,便于分析和定位问题代码。

【技术实现步骤摘要】

本专利技术涉及计算机应用领域,尤其是一种。
技术介绍
现今的操作系统中,对内存的使用已经成为是程序员最棘手的问题,对内存的释放与申请内存长度不同等不当使用往往会造成程序崩溃、内存越界,也可能会出现由于内存越界导致的数据不正确等各种诡异问题。各种语言的自动内存回收等机制也被不断开发出来。即便是能能正确的申请和释放内存,当频繁进行申请和释放也可能会造成以下两个问题。一是对效率的影响,申请和释放内存在操作系统能够内部需要做很多处理,效率往往不高。二是由于系统内存分配机制问题造成,当用户请求一个内存单元小于一个页时,系统会在内存页上分配内存,但当另一个内存请求大于上个页的剩余空间时,系统会在新的页上分配所请求的内存空间,此时第一个页的剩余空间就会形成碎片,形成大量内存碎片后会导致系统运行效率下降,甚至导致程序不能运行。用于频繁接收请求并发送处理结果的网络服务器更容易出现问题,系统会很快的耗尽内存使系统运行效率逐渐降低,最后不能处理请求。频繁申请和释放内存单元会对降低效率,增加CPU开销,可以使用事先分配足够多内存单元方式降低申请和释放的开销,但事先分配内存单元的缺点是我们并不确定我们将要使用的内存单元大小,如果频繁需求的内存大小远远小于事先分配的内存单元,则会造成内存单元的巨大浪费,同时如果事先分配太多内存到内存池,当用户没有频繁的内存请求时会造成系统和应用程序也不能使用此部分内存,同样造成内存的浪费。并且,在实际开发中经常会出现的内存重复释放,内存越界,内存越界的问题,从而导致服务器不稳定,崩溃,定位困难。
技术实现思路
本专利技术的目的在于提供一种,以提高内存的分配性能并同时判断内存的合法性。为了达到上述目的,本专利技术提供了一种,包括:将内存池划分为多个大小不同的次级内存池,各个次级内存池按照不同的对齐长度对应不同的内存链表;根据需要的内存空间的大小选择次级内存池,按照与所选择的次级内存池对应的对齐长度分配内存;在分配的内存空间前加一头结构,所述头结构用于记录所述分配的内存空间的大小以及使用状态。优选的,在上述的中,将所述内存池划分为三个大小不同的次级内存池,分别为:第一次级内存池、第二次级内存池和第三次级内存池,所述第一次级内存池的空间小于所述第二次级内存池,所述第二次级内存池小于所述第三次级内存池。优选的,在上述的中,当需要的内存空间小于等于第一阈值时,选择所述第一次级内存池;当需要的内存空间大于所述第一阈值且小于等于第二阈值时,选择所述第二次级内存池;当需要的内存空间大于所述第二阈值时,选择所述第三次级内存池。优选的,在上述的中,所述第一次级内存池的对齐长度为16字节的自然数倍数。优选的,在上述的中,所述第一次级内存池的对齐长度为16字节。优选的,在上述的中,所述第二次级内存池的对齐长度为128字节的自然数倍数。优选的,在上述的中,所述第二次级内存池的对齐长度为128字-K-T O优选的,在上述的中,所述头结构包括第一头结构和第二头结构,所述第一头结构用于记录所述分配的内存空间的大小,所述第二头结构用于记录所述分配的内存空间的使用状态。优选的,在上述的中,所述第一头结构分配有4个字节。优选的,在上述的中,所述第二头结构分配有I个字节,当所述分配的内存空间在使用中时,所述第二头结构中的值设置为I;当所述分配的内存空间被释放后,所述第二头结构中的值设置为O。在本专利技术提供的中,将内存池划分为多个大小不同的次级内存池,各个次级内存池按照不同的对齐长度对应不同的内存链表。每个链表都是独立线程安全的,同步颗粒更小,相应减少了同步,提高了分配性能。根据需要的内存空间的大小选择次级内存池,按照与所选择的次级内存池对应的对齐长度分配内存,并在分配的内存空间前加一用于记录所述分配的内存空间的大小以及使用状态的头结构,并通过所述头结构中的值来判断内存使用的合法性,生成调用堆栈,并记录日志,便于分析和定位问题代码。【附图说明】图1为本专利技术实施例中的流程图。【具体实施方式】下面将结合示意图对本专利技术的【具体实施方式】进行更详细的描述。根据下列描述和权利要求书,本专利技术的优点和特征将更清楚。需说明的是,附图均采用非常简化的形式且均使用非精准的比例,仅用以方便、明晰地辅助说明本专利技术实施例的目的。本专利技术实施例提供了一种,具体的,如图1所示,包括以下步骤:S1:将内存池划分为多个大小不同的次级内存池,各个次级内存池按照不同的对齐长度对应不同的内存链表。在本实施例中,将所述内存池划分为三个大小不同的次级内存池,分别为:第一次级内存池、第二次级内存池和第三次级内存池,所述第一次级内存池的空间小于所述第二次级内存池,所述第二次级内存池小于所述第三次级内存池。所述第一次级内存池的对齐长度为16字节的自然数倍数。较优的,所述第一次级内存池的对齐长度为16字节。当然在本本专利技术的其他实施例中,所述第一次级内存池的对齐长度还可以是32字节、48字节或者64字节,但是考虑到在实际应用过程中,对齐长度过长会造成资源浪费,因此在本实施例中所述第一次级内存池的对齐长度选择16字节。所述第二次级内存池的对齐长度为128字节的自然数倍数。较优的,所述第二次级内存池的对齐长度为128字节。在本专利技术的其他实施例中,所述第二次级内存池的对齐长度还可以设置为其他长度,但是避免资源浪费,在本实施例中所述第二次级内存池的对齐长度选择128字节。所述第三次级内存池不设置对齐长度,也就是说,在所述第三次级内存池中按照实际需要分配内存。S2:根据需要的内存空间的大小选择次级内存池,按照与所选择的次级内存池对应的对齐长度分配内存。具体的,当需要的内存空间小于等于第一阈值时,选择所述第一次级内存池;当需要的内存空间大于所述第一阈值且小于等于第二阈值时,选择所述第二次级内存池;当需要的内存空间大于所述第二阈值时,选择所述第三次级内存池。在本实施例中,所述第一阈值为20KB,当所需要的内存空间小于等于20KB时,将按照所述第一次级内存池的对齐长度16字节来分配内存。所述对齐长度是指在分配内存时每次分配的最小长度。例如,当需要的内存空间为12字节时,为其分配16字节的空间。当需要的内存空间为16字节时,为其分配的空间也是16字节。当需要的内存空间为29字节时,则为其分配2个16字节长度的空间,即32字节的空间。所述第二阈值为1MB。当所需要的内存空间大于20KB时且小于等于IM当前第1页1 2 本文档来自技高网...

【技术保护点】
一种内存池管理方法,其特征在于,包括:将内存池划分为多个大小不同的次级内存池,各个次级内存池按照不同的对齐长度对应不同的内存链表;根据需要的内存空间的大小选择次级内存池,按照与所选择的次级内存池对应的对齐长度分配内存;在分配的内存空间前加一头结构,所述头结构用于记录所述分配的内存空间的大小以及使用状态。

【技术特征摘要】

【专利技术属性】
技术研发人员:杜利波
申请(专利权)人:盛趣信息技术上海有限公司
类型:发明
国别省市:上海;31

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

1