内存池管理方法和系统的制作方法

文档序号:6430149阅读:108来源:国知局
专利名称:内存池管理方法和系统的制作方法
技术领域
本发明涉及计算机应用领域,尤其涉及一种内存池管理方法和系统。
背景技术
随着云的时代的到来,现在更多的是强调大规模计算机组成的计算机集群,而高可用集群便是计算机集群的一种。为了保证高可用集群的正常工作,需要各个集群内节点不断地发送信息,以证明节点的活性。由于在生成信息的各项内容时经常需要分配一些非常小的内存,因此很容易造成内存碎片,而且对于高可用集群来说,长时间的内存碎片积累可能会耗尽系统所有的内存,产生系统错误。现有技术提供了一种通信设备的内存管理方法,该方法在一开始首先申请一大块儿内存,然后将该内存分割成大小相等的多个内存块,使用这些相同大小的内存块来实现类似于内存池的功能。在实现本发明过程中,发明人发现现有技术至少存在如下问题由于在初始化时即分配大块内存,且分割后又是相同的内存块,对于用户所需的不同大小的内存块,相同大小的内存块会出现不足或过多的情况,无法合理使用内存,造成了内存资源的浪费。

发明内容
本发明提供一种内存池管理方法和系统,要解决的技术问题是如何减少内存碎片的产生。为解决上述技术问题,本发明提供了如下技术方案一种内存池管理系统,包括第一判断模块,用于在进行内存释放过程中,判断待释放的内存块的大小是否在预先设置的小内存块的取值范围内;处理模块,用于在判断模块确定待释放的内存块大小在所述小内存块的取值范围内,将所述待释放的内存块放入内存池中;第二判断模块,用于在接收到用户申请内存的请求后,判断内存池中是否有大小满足所述请求所需内存的内存块;第一分配模块,用于在所述第二判断模块判断确定内存池中有大小满足所述请求所需内存的内存块时,将内存池中大小满足所述请求所需内存的内存块分配给所述用户。优选的,所述系统还具有如下特点所述系统还包括生成模块,用于在所述第二判断模块判断确定内存池中没有大小满足所述请求所需内存的内存块时,从系统内存中生成大小满足所述请求所需内存的内存块;第二分配模块,用于将所述生成模块生成的大小满足所述请求所需内存的内存块分配给所述用户。优选的,所述系统还具有如下特点所述系统还包括
第三判断模块,用于在进行释放内存过程中,判断待释放的内存块是否被破坏;其中,所述第一判断模块在所述第三判断模块判断确定待释放的内存块没有被破坏时,判断待释放的内存块的大小是否在预先设置的小内存块的取值范围内。优选的,所述系统还具有如下特点所述系统还包括存储模块,用于在所述第三判断模块判断确定待释放的内存块被破坏时,将所述待释放的内存块中的信息存储到磁盘。优选的,所述系统还具有如下特点分配给所述用户的内存块包括用于供用户使用的内存和守卫所占用的内存,其中所述守卫所占用的内存记录有一组数值;其中所述第二判断模块,用于判断被用户释放的内存块中所述守卫所占用的内存记录的数值是否发生变化,如果发生变化,判断确定没有被破坏;如果没有发生变化,判断确定被破坏。一种内存池管理方法,包括在进行内存释放过程中,判断待释放的内存块的大小是否在预先设置的小内存块的取值范围内;在待释放的内存块的大小在所述小内存块的取值范围内,将所述待释放的内存块放入内存池中;在接收到用户申请内存的请求后,判断内存池中是否有大小满足所述请求所需内存的内存块;在判断确定内存池中有大小满足所述请求所需内存的内存块时,将内存池中大小满足所述请求所需内存的内存块分配给所述用户。优选的,所述方法还具有如下特点所述方法还包括在内存池中没有大小满足所述请求所需内存的内存块时,从系统内存中生成大小满足所述请求所需内存的内存块;将生成的大小满足所述请求所需内存的内存块分配给所述用户。优选的,所述方法还具有如下特点所述方法还包括在进行释放内存过程中,判断待释放的内存块是否被破坏;其中,在待释放的内存块没有被破坏时,判断待释放的内存块的大小是否在预先设置的小内存块的取值范围内。优选的,所述方法还具有如下特点所述方法还包括在待释放的内存块被破坏时,将所述待释放的内存块中的信息存储到磁盘。优选的,所述方法还具有如下特点分配给所述用户的内存块包括用于供用户使用的内存和守卫所占用的内存,其中所述守卫所占用的内存记录有一组数值;其中判断待释放的内存块是否被破坏是通过如下方式实现的,包括判断被用户释放的内存块中所述守卫所占用的内存记录的数值是否发生变化,如果发生变化,判断确定没有被破坏;如果没有发生变化,判断确定被破坏。与现有技术相比,通过将待释放的小内存块放入到内存池中,并不是将其归回给系统内存,在下次申请小内存时,从内存池中选取合适的内存块,无需再对系统内存进行切割,减少了内存碎片的产生,保证了内存环境的稳定性。另外,这种内存池可以使用非常宽范围的内存申请。同时,通过内存守卫检测内存破坏实现的内存池还具有内存使用错误检查和内存泄露评估的功能,极大的避免了内存使用所产生的问题。


图1为本发明提供的内存池管理系统实施例的结构示意图;图2为图1所示实施例中系统的另一结构示意图;图3为图1所示实施例中系统的又一结构示意图;图4为图3所示实施例中系统的再一结构示意图;图5为本发明提供的内存池管理方法实施例的流程示意图。
具体实施例方式为使本发明的目的、技术方案和优点更加清楚,下面将结合附图及具体实施例对本发明作进一步的详细描述。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。图1为本发明提供的内存池管理系统实施例的结构示意图。图1所示系统实施例, 包括第一判断模块101,用于在进行内存释放过程中,判断待释放的内存块的大小是否在预先设置的小内存块的取值范围内;处理模块102,与所述第一判断模块101相连,用于在判断模块确定待释放的内存块大小在所述小内存块的取值范围内,将所述待释放的内存块放入内存池中;第二判断模块103,与所述处理模块102相连,用于在接收到用户申请内存的请求后,判断内存池中是否有大小满足所述请求所需内存的内存块;第一分配模块104,与所述第二判断模块103相连,,用于在所述第二判断模块判断确定内存池中有大小满足所述请求所需内存的内存块时,将内存池中大小满足所述请求所需内存的内存块分配给所述用户。与现有技术相比,通过将待释放的小内存块放入到内存池中,并不是将其归回给系统内存,在下次申请小内存时,从内存池中选取合适的内存块,无需再对系统内存进行切割,减少了内存碎片的产生,保证了内存环境的稳定性。需要说明的是,在内存初始化时,内存池中并没有内存块,只是接受到用户对内存的请求并由系统生成相应的内存块后才逐渐增加的。优选的,所述内存池包括N个子内存池,其中同一子内存池中的内存块大小相等, 且第η个子内存池中一内存块的大小是第η-1个子内存池中一内存块的大小的21倍,其中 N为大于或等于2的整数,i为正整数。其中内存块中最小的内存块可以是32字节,并以2 的幂的倍数递增的其他内存块。具体来说,从大于所述请求所需内存的内存块中,选择最小的内存块作为满足所述请求所需内存的内存块。举例来说,用户请求所需的内存为90字节,如果大于90字节的内存块有大小为 128的内存块和大小为256的内存块,则选择内存块为1 的内存块作为满足所述请求所需内存的内存块。
6
图2为图1所示实施例中系统的另一结构示意图。图2所示系统实施例还包括生成模块201,与所述第二判断模块103相连,用于在所述第二判断模块判断确定内存池中没有大小满足所述请求所需内存的内存块时,从系统内存中生成大小满足所述请求所需内存的内存块;第二分配模块202,与所述生成模块201相连,用于将所述生成模块生成的大小满足所述请求所需内存的内存块分配给所述用户。例如,用户所请求的内存大小大于内存池中最大的内存块,则需要采用生成模块和第二分配模块来处理。由上可以看出,通过将内存划分为两部分,可以满足用户的多种需求,保证了内存分配的高效性。图3为图1所示实施例中系统的又一结构示意图。图3所示系统实施例中所述系统还包括第三判断模块301,用于在进行释放内存过程中,判断待释放的内存块是否被破坏;其中,所述第一判断模块在所述第三判断模块判断确定待释放的内存块没有被破坏时,判断待释放的内存块的大小是否在预先设置的小内存块的取值范围内。具体来说,如果所述待释放的内存块来自内存池,则根据所述待释放的内存块的大小放入子内存池中;如果所述待释放的内存块来自系统内存,则将所述待释放的内存块释放到系统中。其中,内存块被破坏是指自身使用越界、其它内存在使用过程中越界覆盖了该内存的行为或者其他行为。试想如果不进行内存块完好性的检测,直接进行释放,一旦该内存块已遭到破坏, 进行释放操作的话,有可能会引进系统的崩溃。在判断没有未破坏时,再进行释放,保证了系统内存使用的稳定性。图4为图3所示实施例中系统的再一结构示意图。图4所示系统实施例中所述系统还包括存储模块401,与所述第三判断模块301相连,用于在所述第三判断模块判断确定待释放的内存块被破坏时,将所述待释放的内存块中的信息存储到磁盘。对于被破坏的内存块,通过将该内存块中的内容存储到磁盘上,方便了用户定位内存块的问题。优选的,分配给所述用户的内存块包括用于供用户使用的内存和守卫所占用的内存,其中所述守卫所占用的内存记录有一组数值;其中所述第二判断模块,用于判断被用户释放的内存块中所述守卫所占用的内存记录的数值是否发生变化,如果发生变化,判断确定没有被破坏;如果没有发生变化,判断确定被破坏。其中,对于第一分配模块分配的内存块,是在划分成内存块时为守卫所占用的内存写入数值的,而对于第二分配模块分配的内存,由生成模块在生成的内存块中写入的。优选的,对于一个内存块而言,包括两个区域,其中每个区域都是由连续的内存组成的,一个区域供用户使用,另一个区域供守卫占用,其中供守卫占用的区域在供用户使用的区域之后。通过判断守卫所占用的内存中数值是否发生变化就可以确定该内存块是否发生破坏,实现简单。图5为本发明提供的内存池管理方法实施例的流程示意图。结合图1至4所示的方法实施例,内存分为第一部分内存和第二部分内存,其中所述第一部分内存构成一内存池,所述内存池包括N个子内存池,其中同一子内存池中的内存块大小相等,且第η个子内存池中一内存块的大小是第η-1个子内存池中一内存块的大小的21倍,其中N为大于或等于2的整数,i为正整数,其中所述系统包括步骤501、在进行内存释放过程中,判断待释放的内存块的大小是否在预先设置的小内存块的取值范围内;步骤502、在待释放的内存块的大小在所述小内存块的取值范围内,将所述待释放的内存块放入内存池中;步骤503、在接收到用户申请内存的请求后,判断内存池中是否有大小满足所述请求所需内存的内存块;步骤504、在判断确定内存池中有大小满足所述请求所需内存的内存块时,将内存池中大小满足所述请求所需内存的内存块分配给所述用户。在内存池中没有大小满足所述请求所需内存的内存块时,从系统内存中生成大小满足所述请求所需内存的内存块;将生成的大小满足所述请求所需内存的内存块分配给所述用户。可选的,在进行释放内存过程中,判断待释放的内存块是否被破坏;在进行释放内存过程中,判断待释放的内存块是否被破坏;其中,在待释放的内存块没有被破坏时,判断待释放的内存块的大小是否在预先设置的小内存块的取值范围内。在待释放的内存块被破坏时,将所述待释放的内存块中的信息存储到磁盘。优选的,分配给所述用户的内存块包括用于供用户使用的内存和守卫所占用的内存,其中所述守卫所占用的内存记录有一组数值;其中其中判断待释放的内存块是否被破坏是通过如下方式实现的,包括判断被用户释放的内存块中所述守卫所占用的内存记录的数值是否发生变化,如果发生变化,判断确定没有被破坏;如果没有发生变化,判断确定被破坏。与现有技术相比,通过将待释放的小内存块放入到内存池中,并不是将其归回给系统内存,在下次申请小内存时,从内存池中选取合适的内存块,无需再对系统内存进行切割,减少了内存碎片的产生,保证了内存环境的稳定性。下面以一应用实例对本发明提供的内存池管理方法实施例做进一步说明,该应用实例,包括步骤601、当用户进行释放内存操作时,判断待释放的内存块是否为小内存块;其中,可选的,本步骤还包括判断该内存块是否被破坏,当然,只有该内存块没有被破坏时才进行上述操作。如果是,则执行步骤602 ;否则,执行步骤603。步骤602、将所述内存块放入内存池中。
步骤603、将所述内存块释放到系统中。步骤604、当接收到用户申请内存的请求时,判断用户申请的内存块是否为小内存块;如果是,则执行步骤605 ;否则,执行步骤606。步骤605、从内存池选择相应的内存块给用户。步骤606、从系统的内存中生成相应的内存块给用户。其中,当用户释放步骤605或606的内存块时,跳转到步骤601。与现有技术相比,通过将待释放的小内存块放入到内存池中,并不是将其归回给系统内存,在下次申请小内存时,从内存池中选取合适的内存块,无需再对系统内存进行切割,减少了内存碎片的产生,保证了内存环境的稳定性。本领域普通技术人员可以理解上述实施例的全部或部分步骤可以使用计算机程序流程来实现,所述计算机程序可以存储于一计算机可读存储介质中,所述计算机程序在相应的硬件平台上(如系统、设备、装置、器件等)执行,在执行时,包括方法实施例的步骤之一或其组合。可选地,上述实施例的全部或部分步骤也可以使用集成电路来实现,这些步骤可以被分别制作成一个个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。上述实施例中的各装置/功能模块/功能单元可以采用通用的计算装置来实现, 它们可以集中在单个的计算装置上,也可以分布在多个计算装置所组成的网络上。上述实施例中的各装置/功能模块/功能单元以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。上述提到的计算机可读取存储介质可以是只读存储器,磁盘或光盘等。以上所述,仅为本发明的具体实施方式
,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求所述的保护范围为准。
权利要求
1.一种内存池管理系统,其特征在于,包括第一判断模块,用于在进行内存释放过程中,判断待释放的内存块的大小是否在预先设置的小内存块的取值范围内;处理模块,用于在判断模块确定待释放的内存块大小在所述小内存块的取值范围内, 将所述待释放的内存块放入内存池中;第二判断模块,用于在接收到用户申请内存的请求后,判断内存池中是否有大小满足所述请求所需内存的内存块;第一分配模块,用于在所述第二判断模块判断确定内存池中有大小满足所述请求所需内存的内存块时,将内存池中大小满足所述请求所需内存的内存块分配给所述用户。
2.根据权利要求1所述的系统,其特征在于,所述系统还包括生成模块,用于在所述第二判断模块判断确定内存池中没有大小满足所述请求所需内存的内存块时,从系统内存中生成大小满足所述请求所需内存的内存块;第二分配模块,用于将所述生成模块生成的大小满足所述请求所需内存的内存块分配给所述用户。
3.根据权利要求1或2所述的系统,其特征在于,所述系统还包括第三判断模块,用于在进行释放内存过程中,判断待释放的内存块是否被破坏;其中,所述第一判断模块在所述第三判断模块判断确定待释放的内存块没有被破坏时,判断待释放的内存块的大小是否在预先设置的小内存块的取值范围内。
4.根据权利要求3所述的系统,其特征在于,所述系统还包括存储模块,用于在所述第三判断模块判断确定待释放的内存块被破坏时,将所述待释放的内存块中的信息存储到磁盘。
5.根据权利要求4所述的系统,其特征在于,分配给所述用户的内存块包括用于供用户使用的内存和守卫所占用的内存,其中所述守卫所占用的内存记录有一组数值;其中所述第二判断模块,用于判断被用户释放的内存块中所述守卫所占用的内存记录的数值是否发生变化,如果发生变化,判断确定没有被破坏;如果没有发生变化,判断确定被破坏。
6.一种内存池管理方法,其特征在于,包括在进行内存释放过程中,判断待释放的内存块的大小是否在预先设置的小内存块的取值范围内;在待释放的内存块的大小在所述小内存块的取值范围内,将所述待释放的内存块放入内存池中;在接收到用户申请内存的请求后,判断内存池中是否有大小满足所述请求所需内存的内存块;在判断确定内存池中有大小满足所述请求所需内存的内存块时,将内存池中大小满足所述请求所需内存的内存块分配给所述用户。
7.根据权利要求6所述的方法,其特征在于,所述方法还包括在内存池中没有大小满足所述请求所需内存的内存块时,从系统内存中生成大小满足所述请求所需内存的内存块;将生成的大小满足所述请求所需内存的内存块分配给所述用户。
8.根据权利要求6或7所述的方法,其特征在于,所述方法还包括 在进行释放内存过程中,判断待释放的内存块是否被破坏;其中,在待释放的内存块没有被破坏时,判断待释放的内存块的大小是否在预先设置的小内存块的取值范围内。
9.根据权利要求8所述的方法,其特征在于,所述方法还包括在待释放的内存块被破坏时,将所述待释放的内存块中的信息存储到磁盘。
10.根据权利要求8所述的方法,其特征在于,分配给所述用户的内存块包括用于供用户使用的内存和守卫所占用的内存,其中所述守卫所占用的内存记录有一组数值;其中判断待释放的内存块是否被破坏是通过如下方式实现的,包括 判断被用户释放的内存块中所述守卫所占用的内存记录的数值是否发生变化,如果发生变化,判断确定没有被破坏;如果没有发生变化,判断确定被破坏。
全文摘要
本发明提供一种内存池管理方法和系统,所述系统,包括第一判断模块,用于在进行内存释放过程中,判断待释放的内存块的大小是否在预先设置的小内存块的取值范围内;处理模块,用于在判断模块确定待释放的内存块大小在所述小内存块的取值范围内,将所述待释放的内存块放入内存池中;第二判断模块,用于在接收到用户申请内存的请求后,判断内存池中是否有大小满足所述请求所需内存的内存块;第一分配模块,用于在所述第二判断模块判断确定内存池中有大小满足所述请求所需内存的内存块时,将内存池中大小满足所述请求所需内存的内存块分配给所述用户。
文档编号G06F12/06GK102262597SQ20111022378
公开日2011年11月30日 申请日期2011年8月5日 优先权日2011年8月5日
发明者张书宁, 戴文军, 王佳 申请人:浪潮(北京)电子信息产业有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1