专利名称:一种内存管理方法和内存管理系统的制作方法
技术领域:
本发明涉及信息技术领域,特别涉及一种内存管理方法和内存管理系统。
背景技术:
网络上运行的各种协议和算法越来越丰富,这些都需要配置和管理大量的内存来 支持,内存管理中有两个参数比较重要,即内存利用率和内存管理性能,内存利用率是指内 存被使用的空间所占的比例,内存管理性能是指申请内存或释放内存的性能。内存利用率 越高,则申请内存或释放内存将会需要搬移更多的内存,即内存的管理性能将越低,所以若 要达到高的内存利用率,必然会降低内存的管理性能。目前诸多用于管理内存的内存管理算法中,有些内存管理算法能够实现较高的内 存管理性能;有些内存管理算法能够实现较高的内存利用率,可以根据不同的应用场合选 择不同的内存管理算法。局部压缩算法可以通过调节因子实现对内存利用率和内存管理性能进行调节,通 常,调节因子的值越大,内存利用率越高,相应的,内存管理性能越低;相反,调节因子的值 越小,内存管理性能越高,相应的,内存利用率越低。可以根据不同的应用场合,预先为调节 因子设置合适的值,以满足不同的应用场合对内存管理性能和内存利用率的不同需求,由 于这种灵活性,使得局部压缩算法在内存管理中得到了越来越广的应用。局部压缩算法是将不同大小的内存块混放在一起,当混放的内存块满足数据段的 长度大于或等于KW,或数据段后面的空洞长度大于或等于W时,内存处于稳定状态,其中K 为调节因子,为> 1的整数,W为预先设定的单次申请或单次释放内存区域的最大长度。而 在有内存申请或内存释放时,如果出现数据段的长度小于KW,且数据段后的空洞长度也小 于W时,内存便会处于不稳定状态,此时需要通过内存搬移使得内存重新恢复稳定。其中未 被使用的内存空间为空洞,数据段为相邻两个空洞之间写有数据的区域,该写有数据的区 域可以由连续的至少一个内存块构成。在实施本发明过程中,发明人发现现有技术中至少存在如下问题,目前越来越多 的应用场合需要能够同时兼顾内存管理性能和内存利用率,比如在路由器上运行路由查找 算法的应用场合中,需要在保证内存利用率较高的情况下,内存管理性能也不会太差,而局 部压缩算法,在保证内存利用率较高的情况下,内存管理性能相对较差,不能很好的同时兼 顾到内存利用率和内存管理性能。
发明内容
本发明实施例提供一种内存管理方法和内存管理系统,以解决局部压缩算法不能 很好的同时兼顾到内存利用率和内存管理性能的问题。一方面,提供了一种内存管理方法,将内存划分为第一内存区域和第二内存区域, 采用局部压缩算法管理第一内存区域,所述方法包括所述第一内存区域处于不稳定状态时,用第二内存块中的数据填充导致所述第一内存区域不稳定的空洞,所述第二内存块位于所述第二内存区域中。另一方面,提供了一种内存管理系统,包括划分模块,用于将内存划分为第一内存区域和第二内存区域;管理模块,用于采用局部压缩算法管理第一内存区域;填充模块,用于所述第一内存区域处于不稳定状态时,用第二内存块中的数据填 充导致所述第一内存区域不稳定的空洞,所述第二内存块位于所述第二内存区域中。本发明实施例提供的一种内存管理方法和内存管理系统,有益效果是通过划分 第二内存区域作为辅助区域,利用局部压缩算法管理第一内存区域时,当第一内存区域处 于不稳定状态时,从第二内存区域中取出长度合适的第二内存块的数据来填充导致第一内 存区域不稳定的空洞,由于仅需要搬移导致第一内存区域不稳定的空洞大小的内存空间, 该空洞的长度通常较小,从而大大减少内存的搬移量,使得第一内存区域能够快速的恢复 到稳定状态,进而在保证内存利用率较高的情况下,进一步提高局部压缩算法的内存管理 性能,从而使得局部压缩算法能够较好的同时兼顾到内存利用率和内存管理性能。
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现 有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本 发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以 根据这些附图获得其他的附图。图1-1为现有技术局部压缩算法中处于稳定状态的内存区域;图1-2为现有技术局部压缩算法中处于不稳定状态的内存区域;图1-3为现有技术局部压缩算法搬移后处于稳定状态的内存区域;图1-4为现有技术局部压缩算法中处于不稳定状态的内存区域;图2为本发明实施例提供的一种内存管理方法流程图;图3为本发明实施例提供的另一种内存管理方法流程图;图4为本发明实施例提供的另一种内存管理方法流程图;图5为本发明实施例中第一内存区域和第二内存区域示意图;图5-1为本发明实施例中在第一内存区域释放内存示意图;图5-2为本发明实施例中在第一内存区域释放内存示意图;图5-3为本发明实施例中在第一内存区域释放内存示意图;图5-4为本发明实施例中在第一内存区域分配内存示意图;图5-5为本发明实施例中在第一内存区域分配内存示意图;图5-6为本发明实施例中在第一内存区域分配内存示意图;图6为本发明实施例中内存申请时填充空洞的示意图;图7为本发明实施例中内存释放时填充空洞的示意图;图8为本发明实施例提供的另一种内存管理方法流程图;图9为本发明实施例提供的再一种内存管理方法流程图;图10为本发明实施例提供的一种内存管理系统框图;图11为本发明实施例提供的另一种内存管理系统框图12为本发明实施例提供的另一种内存管理系统框图;图13为本发明实施例提供的再一种内存管理系统框图。
具体实施例方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完 整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于 本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他 实施例,都属于本发明保护的范围。为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方 式作进一步地详细描述。局部压缩算法是在内存管理中得到广泛应用的一种内存管理算法,该算法应用比 较灵活,可以通过调节因子满足不同应用场合对内存利用率和内存管理性能的不同需求。利用局部压缩算法进行内存管理的方法具体为将不同大小的内存块混放在一 起,一般当有内存申请时,会随机分配一段内存空间供使用,即生成一个新的内存块;逐渐 的,随着内存被越来越多的使用,就会在内存中形成一个个有数据的内存块和一个个没有 被分配使用的空洞,相邻两个空洞之间写有数据的区域就是数据段,该写有数据的区域可 以由连续的至少一个内存块构成。当混放的内存块满足如下两个条件之一时,内存处于稳 定状态1、数据段的长度大于或等于KW ;K为调节因子;2、数据段后的空洞长度大于或等于W ;上述W为预先设定的单次申请/释放内存区域的最大长度,该最大长度可以根据 具体的应用场合预先设定。采用局部压缩算法管理内存,其内存管理性能主要体现在申请内存或释放内存 时,内存从不稳定状态恢复到稳定状态的管理性能。参见图1-1至图1-4,图1-1示出的内存区域中,数据段1的长度大于或等于KW, 数据段2的长度也大于或等于KW,均满足第一个条件,数据段3的长度小于KW,不满足第一 个条件,而其后的空洞3的长度大于W,满足第二个条件,此时,该内存区域处于稳定状态。参见图1-2,在有内存申请时,分配一段内存空间供使用,此时会形成新的数据段 A,即新的内存块a,并生成新的空洞1'和空洞1",如果数据段A的长度小于KW,而其后的 空洞1"的长度也小于W,则图1-2中示出的内存区域处于不稳定状态,此时需要通过内存 搬移,至该内存区域重新满足上述两个条件之一,重新恢复到稳定状态。通常采用的内存搬 移方法是搬移数据段A相邻的数据段(可以是其前面相邻的数据段,也可以是其后面相邻 的数据段),与数据段A连接起来,形成新的数据段,使得新的数据段的长度大于或等于KW, 或使得搬移后形成的新的空洞的长度大于或等于W,如果此次搬移均不能满足上述两个条 件,则需要再次进行内存搬移,直至内存重新恢复到稳定状态。比如,参见图1-3,数据段1 长度小于KW,空洞1的长度大于W,当有内存申请时,在空洞1的前端分配数据段A供使用, 此时,数据段A与其相邻的数据段1合并,形成新的数据段a,空洞la,经判断数据段a的长 度小于KW,空洞Ia的长度小于W,则将数据段2整块搬移到数据段a后面,以使得内存处于 稳定状态。可见,此时需要搬移整个数据段2那么大长度的内存空间,才能使得内存恢复稳定,因此需要搬移的内存量较大,对内存的管理性能消耗较多,故内存的管理性能较低。参见图1-4,在内存释放时,将内存块b释放,此时,会形成新的数据段1'和数据 段1",和新的空洞B,由于W为预先设定的单次申请或单次释放内存区域的最大长度,则 空洞B的长度小于W,如果数据段1'的长度小于KW,则图1-4中示出的内存区域处于不稳 定状态,此时需要通过内存搬移,使该内存区域重新满足上述两个条件之一,恢复到稳定状 态。通常采用的内存搬移方法是搬移数据段1'相邻的数据段(可以是其前面相邻的数据 段,也可以是其后面相邻的数据段),与数据段1 ‘连接起来,形成新的数据段,使得新的数 据段的长度大于或等于KW,或使得搬移后形成的新的空洞的长度大于或等于W,如果此次 搬移均不能满足上述两个条件,则需要再次进行内存搬移,直至内存重新恢复到稳定状态。当内存区域处于不稳定状态时,往往会导致需要搬移大量的内存空间才能使得内 存重新恢复到稳定状态,尤其是内存中的空闲空间较少时,需要搬移的内存空间会急剧增 大,即会导致内存管理性能急剧下降,比如应用在路由查找算法中就会出现当表项很多时 会导致表项刷新性能急剧下降,其中表项刷新性能是指单位时间内增加表项的性能或单位 时间内删除表项的性能,可见,如果表项刷新性能急剧下降,将会使路由查找算法的实现变 得非常困难。而大量的内存搬移就是内存管理性能无法提高的主要瓶颈,所以,本发明实施 例在保证内存利用率较高的情况下,通过减少内存搬移量,提高局部压缩算法的内存管理 性能,从而使得局部压缩算法能够较好的同时兼顾到内存利用率和内存管理性能,以便使 得能够应用在更多需要能够同时兼顾内存管理性能和内存利用率的应用场合。参见图2,本发明实施例提供一种内存管理方法,包括如下步骤S201 将内存划分为第一内存区域和第二内存区域,采用局部压缩算法管理第一 内存区域;S202:所述第一内存区域处于不稳定状态时,用第二内存块中的数据填充导致所 述第一内存区域不稳定的空洞,所述第二内存块位于所述第二内存区域中。本发明实施例提供的内存管理方法,通过划分第二内存区域作为辅助区域,利用 局部压缩算法管理第一内存区域时,当第一内存区域处于不稳定状态时,从第二内存区域 中取出长度合适的第二内存块的数据来填充导致第一内存区域不稳定的空洞,由于仅需要 搬移导致第一内存区域不稳定的空洞大小的内存空间,该空洞的长度通常较小,从而大大 减少内存的搬移量,使得第一内存区域能够快速的恢复到稳定状态,进而在保证内存利用 率较高的情况下,进一步提高局部压缩算法的内存管理性能,从而使得局部压缩算法能够 较好的同时兼顾到内存利用率和内存管理性能。参见图3,本发明实施例提供另一种内存管理方法,包括如下步骤S301 将内存划分为第一内存区域和第二内存区域,采用局部压缩算法管理第一 内存区域;其中,划分出来第二内存区域作为辅助区域,用来辅助第一内存区域能够尽快的 由不稳定状态恢复到稳定状态。相对第一内存区域而言,作为辅助区域的第二内存区域的 空间通常很小,比如第二内存区域的长度可以是第一内存区域的左右。S302 当接收到内存申请时,优先在第二内存区域中进行分配;当接收到内存申请时,可以随机在第一内存区域和第二内存区域中进行分配,优 先的,本实施例优先在第二内存区域中进行分配,在本实施例中并不限制在第二内存区域
8中进行内存分配的具体手段,已知的内存分配手段均可以应用。S303:所述第一内存区域处于不稳定状态时,用第二内存块中的数据填充导致所 述第一内存区域不稳定的空洞,该第二内存块位于所述第二内存区域中。其中,判断导致第一内存区域不稳定的空洞的方法包括判断如果第一内存区域中数据段的长度小于调节因子与预设值的乘积,且该数据 段后的空洞长度小于预设值,则该空洞为导致第一内存区域不稳定的空洞;上述预设值为 预先设定的单次申请内存或单次释放内存的最大长度值。当用第二内存块中的数据填充空洞之后,还包括再次判断第一内存区域是否恢复 稳定状态,否则再次在第二内存区域中取出合适长度的第二内存块中的数据来填充导致第 一内存区域不稳定的空洞,直至第一内存区域处于稳定状态为止。当取出第二内存块中的数据填充导致第一内存区域不稳定的空洞后,被取出数据 的第二内存块的状态便会恢复到未使用状态,此时,当再次有内存申请时,可以被重新分 配。可见,本发明实施例提供的内存管理方法,通过划分第二内存区域作为辅助区域, 利用局部压缩算法管理第一内存区域时,当第一内存区域处于不稳定状态时,从第二内存 区域中取出长度合适的第二内存块的数据来填充导致第一内存区域不稳定的空洞,由于仅 需要搬移导致第一内存区域不稳定的空洞大小的内存空间,该空洞的长度通常较小,从而 大大减少内存的搬移量,使得第一内存区域能够快速的恢复到稳定状态,进而在保证内存 利用率较高的情况下,进一步提高局部压缩算法的内存管理性能,从而使得局部压缩算法 能够较好的同时兼顾到内存利用率和内存管理性能。另外,当有内存申请时,优先在第二内存区域中进行分配,当第二内存区域空间不 够时再在第一内存区域中进行分配,这样,可以使得第二内存区域能够有更多的数据用于 填充,更大程度的提高内存管理性能。参见图4,本发明实施例提供另一种内存管理方法,包括如下步骤S401 将内存划分为第一内存区域和第二内存区域,采用局部压缩算法管理第一 内存区域;其中,划分出来第二内存区域作为辅助区域,用来辅助第一内存区域能够尽快的 由不稳定状态恢复到稳定状态。相对第一内存区域而言,作为辅助区域的第二内存区域的 空间通常很小。S402 在第二内存区域中创建至少一页,并管理所述页的页信息;其中每页由长 度相等的至少一个第二内存块连续排列组成,第二内存块的长度小于或等于预设值W;其中,预设值W为预先设定的单次申请内存或单次释放内存的最大长度,可以根 据具体的应用场合预先设定。结合参见图5,第一内存区域中将大小不等的第一内存块混放在一起,利用局部压 缩算法管理第一内存区域,当混放的第一内存区域满足数据段的长度大于或等于KW ;或 数据段后的空洞长度大于或等于W时,第一内存区域处于稳定状态,其中K为调节因子,为 ^ 1的整数。其中第一内存区域中没有被分配使用的空间为空洞,相邻两个空洞之间已经 被分配使用的空间即写有数据的区域就是数据段,该写有数据的区域可以由连续的至少一 个第一内存块构成。
在第一内存区域外的内存区域中另外划分一部分空间,为第二内存区域,在其中 创建η页,其中η为整数且η ^ 1,本实施例中选取η大于1,每页中连续排列至少一个第二 内存块,且每页中的第二内存块长度相等,但,不同页的第二内存块的长度可以不相等。如 页1中包括dl个长度相等的第二内存块1,长度为Li,页m中包括dm个第二内存块m,长度 为Lm,页η中包括dn个大小相等的第二内存块n,长度为Ln,其中m为小于η大于1的整 数,Li、Lm和Ln可以相等,也可以不相等;dl、dm、dn可以是一个,也可以是多个,本实施例 中选取每页中的第二内存块的个数为多个。管理每页的页信息,包括每页的页首地址与第二内存块长度的对应关系、和第二 内存块的状态信息(空闲状态或非空闲状态)等。S403:当接收到内存申请时,判断是否有与本次申请内存段长度相等的第二内存 块长度,是则执行步骤S406 ;否则执行步骤S404 ;S404:判断是否有大于本次申请内存段长度的第二内存块长度,是则执行步骤 S406,否则执行步骤S405 ;S405 在第一内存区域中进行分配,执行步骤S407。S406:依据所述页首地址与第二内存块长度的对应关系,获取该第二内存块长度 对应的页首地址,并依据所述第二内存块的状态信息,在获取的页首地址对应的页内分配 处于空闲状态的第二内存块。比如,假设在划分的第二内存区域中,创建3页,页1中连续排列有5个长度均为1 的第二内存块,页2中连续排列有4个长度均为2的第二内存块,页3中连续排列有6个长 度均为4的第二内存块,当申请长度为2的内存段时,经判断有等于2的第二内存块长度, 依据管理的页首地址与第二内存块长度的对应关系,获取到该第二内存块长度对应的页首 地址为页2的页首地址,依据所述第二内存块的状态信息,在页2中分配一个处于空闲状态 的第二内存块供使用;如果申请长度为3的内存段时,经判断没有等于3的第二内存长度, 则再去判断是否有大于3的第二内存块长度,经判断有长度为4的第二内存块长度,依据管 理的页首地址与第二内存块长度的对应关系,获取到该第二内存块长度对应的页首地址为 页3的页首地址,依据所述第二内存块的状态信息,在页3中分配一个处于空闲状态的第二 内存块供使用;当申请长度为5的内存段时,经判断没有等于或大于5的第二内存长度,则 在第一内存区域中进行分配。当分配某个第二内存块供使用后,需要修改相应的页信息,将被分配的第二内存 块的状态信息修改为非空闲状态,以便实现页信息的有效管理。上述步骤S403 S406实现的是当接收到内存申请时,优先在第二内存区域中分 配第二内存块的方法,在实际应用中不仅仅限于上述分配方法,只要能实现优先在第二内 存区域中进行分配的方法均可。S407:当第一内存区域处于不稳定状态时,用第二内存块中的数据填充导致所述 第一内存区域不稳定的空洞。由于第一内存区域中大小不等的第一内存块都是混放的,且由于第一内存区域一 般都很大,通常很难实现对每个第一内存块的地址和长度等信息进行有效的管理和维护; 而第二内存区域作为第一内存区域的辅助区域,通常而言其空间较小,因此,比较容易实现 对第二内存区域中的相关信息进行有效的管理和维护,比如页信息的维护和管理等,这样,便可以在第二内存区域中快速的找到合适大小的第二内存块,用于填充导致第一内存区域 不稳定的空洞,使得第一内存区域可以快速的恢复到稳定状态,进而提高局部压缩算法的 内存管理性能。其中,判断第一内存区域是否处于不稳定状态的方法可以是判断如果第一内存区域中数据段的长度小于调节因子K与预设值W的乘积,且该 数据段后的空洞长度小于预设值W,则第一内存区域处于不稳定状态。具体而言,当在第一内存区域中有内存分配或有内存释放时,第一内存区域中会 产生新的数据段和新的空洞,当新的数据段的长度小于调节因子K与预设值W的乘积,且该 新的数据段后的空洞长度也小于预设值W,则此时第一内存区域处于不稳定状态,该长度小 于预设值W的空洞为导致第一内存区域不稳定的空洞。其中,判断导致第一内存区域不稳定的空洞的方法包括判断如果第一内存区域中数据段的长度小于调节因子与预设值的乘积,且该数据 段后的空洞长度小于预设值,则该空洞为导致第一内存区域不稳定的空洞;上述预设值为 预先设定的单次申请内存或单次释放内存的最大长度值。在实际应用中,如果存在两个空 洞,当填充其中任何一个均可以使得第一内存区域恢复稳定状态的话,优选的可以选择长 度小的空洞作为导致第一内存区域不稳定的空洞,以便进一步的减小内存搬移量,进一步 提高局部压缩算法的内存管理性能。比如,参见图5-1,在第一内存区域的数据段1的中部释放内存空间k,此时产生新 的数据段Ia和数据段lb,及新的空洞0,则判断如果空洞0的长度小于W,且数据段Ia的长 度小于KW,则空洞0为导致第一内存区域不稳定的空洞;或者,判断如果数据段Ib的长度小于KW,且空洞1的长度小于W(假设数据段Ia 的长度大于KW),则空洞0或空洞1为导致第一内存区域不稳定的空洞,优选的,可以选择长 度小空洞作为导致第一内存区域不稳定的空洞。参见图5-2,在第一内存区域的数据段2的前端释放内存空间U,此时,空间u与其 相邻的空洞1合并形成新的空洞la,及新的数据段2a,判断如果数据段2a的长度小于KW, 且空洞2的长度小于W,则空洞2或空间u为导致第一内存区域不稳定的空洞,优选的,可以 选择两者中长度较小的作为导致第一内存区域不稳定的空洞。参见图5-3,在第一内存区域的数据段1的后端释放内存空间E,此时,空间E与其 相邻的空洞1合并形成新的空洞la,和新的数据段la,判断如果数据段Ia的长度小于KW, 且空洞Ia的长度小于W,则空洞Ia或空间E为导致第一内存区域不稳定的空洞,优选的,可 以选择两者中长度小的作为导致第一内存区域不稳定的空洞。参见图5-4,在第一内存区域的空洞1中部分配空间m,此时形成新的数据段M,空 洞Ia和空洞lb,判断如果空洞Ia的长度小于W,且数据段1的长度小于KW,则空洞Ia为导 致第一内存区域不稳定的空洞;如果数据段1、空洞Ia和数据段M的长度之和小于KW,且空洞Ib也小于W的话, 则空洞Ib也是导致第一内存区域不稳定的空洞,即如果数据段1、空洞Ia和数据段M的长 度之和小于KW且空洞Ib也小于W,则空洞Ia和空洞Ib都是导致第一内存区域不稳定的空 洞,此时需要将空洞Ia和空洞Ib都进行填充才能使得第一内存区域恢复到稳定状态。参见图5-5,在第一内存区域的空洞1的前端分配空间n,此时空间η与其相邻的数据段1合并形成新的数据段la,和新的空洞la,判断如果数据段Ia的长度小于KW,且空 洞Ia的长度小于W,则空洞Ia为导致第一内存区域不稳定的空洞。参见图5-6,在第一内存区域的空洞1的后端分配空间h,此时空间h与其相邻的 数据段2合并形成新的数据段2a,和新的空洞la,判断如果数据段1的长度小于KW,且空洞 Ia的长度小于W,则空洞Ia为导致第一内存区域不稳定的空洞。优选的,用第二内存块中的数据填充导致第一内存区域不稳定的空洞的方法可以 是判断是否有与导致第一内存区域不稳定的空洞长度相等的第二内存块长度,是则 依据所述页首地址与第二内存块长度的对应关系,获取该第二内存块长度对应的页首地 址;依据所述第二内存块的状态信息,在所述页首地址对应的页内,取出处于非空闲状态的 第二内存块中的数据,填充导致所述第一内存区域不稳定的空洞;或判断是否有多个第二内存块长度之和等于导致第一内存区域不稳定的空洞长度, 是则依据等于所述空洞长度所需的第二内存块长度与个数的对应规则,和所述页首地址与 第二内存块长度的对应关系,获取该多个第二内存块长度分别对应的至少一个页首地址; 依据所述第二内存块的状态信息,在该至少一个页首地址对应的页内,取出相应长度和个 数的处于非空闲状态的第二内存块中的数据,填充导致所述第一内存区域不稳定的空洞。结合参见图6,当有内存申请时,假设在空洞1中分配第一内存块F供使用,此时产 生新的数据段0,和新的空洞10、空洞11。通过判断,空洞10前面的数据段1的长度大于 KW,而如果空洞11前面的数据段0的长度小于KW(每次申请内存的最大长度为W,K 一般为 ^ 1的整数),如果空洞11的长度小于W,则空洞11为导致第一内存区域不稳定的空洞,即 此时第一内存区域处于不稳定状态。假设,经判断,第二内存块长度Lm与导致第一内存不 稳定的空洞11的长度相等,则依据所述页首地址与第二内存块长度的对应关系,获取该第 二内存块长度Lm对应的页首地址为页m的页首地址;依据所述第二内存块的状态信息,在 该页首地址对应的页m内,取出处于非空闲状态的第二内存块中的数据,填充空洞11。当 然,也可以有多个第二内存块长度之和等于空洞11时,用该多个第二内存块中的数据来填 充空洞11。结合参见图7,当有内存释放时,在数据段1中释放空间Z,该空间Z包括至少一个 第一内存块,此时生成新的空洞C,数据段10和数据段11,如果数据段10的长度小于KW, 并且空洞C的长度小于W,则通过判断可知,空洞C为导致第一内存区域不稳定的空洞,即 此时第一内存区域处于不稳定状态。假设,经判断,2个第二内存块长度Ll与1个第二内 存块长度Lm之和,等于导致第一内存区域不稳定的空洞C的长度,则依据所述页首地址与 第二内存块长度的对应关系,获取该3个第二内存块长度分别对应的页首地址页1的页首 地址和页m的页首地址;依据所述第二内存块的状态信息,在页1的页首地址和页m的页首 地址对应的页1和页m内,依据上述对应规则(即长度Ll与数量2对应,及Lm与数量1对 应),在页1中取出2个处于非空闲状态的第二内存块中的数据,和在页m中取出1个处于 费空闲状态的第二内存块中的数据,一并填充导致空洞C中。当然,也可以有与空洞C长度 相等的第二内存块长度时,用该一个第二内存块中的数据来填充空洞C。现有技术中,当第一内存区域处于不稳定状态时,无法从现有的第一内存区域中 快速的找到合适大小的内存空间进行搬移,而往往一次搬移并不能使得第一内存区域达到
12稳定,常常是需要经过多次的搬移才能使得第一内存区域重新达到稳定,对于内存利用率 越高的情况,这种搬移的次数会相应的增多,因此内存的管理性能相对越低。而采用本发明实施例提供的这种填充方式,可以减小内存的搬移量,而使得第一 内存区域能够快速的恢复到稳定状态,从而可以在不损失内存利用率的情况下,大大的提 高内存的管理性能。当用至少一个所述第二内存块中的数据填充空洞之后,还包括再次判断第一内存 区域是否恢复稳定状态,否则再次在第二内存区域中取出合适长度的第二内存块中的数据 来填充导致第一内存区域不稳定的空洞,直至第一内存区域处于稳定状态为止。其中,判断第一内存区域是否恢复稳定状态的方法包括判断数据段的长度是否大于或等于调节因子乘以预设值,是则内存恢复稳定状 态;否则判断该数据段后的空洞长度是否大于或等于所述预设值,是则内存恢复稳定 状态。当取出第二内存块中的数据填充导致第一内存区域不稳定的空洞后,被取出数据 的第二内存块的状态便会恢复空闲状态,此时,需要修改相应的页信息,将其状态修改为空 闲状态,当再次有内存申请时,便可以被重新分配。其中,优先在第二内存区域进行分配的步骤S403 S406,与填充的步骤S407之间 没有严格的顺序限定,当接收到内存申请时,便执行步骤S403 S406,当第一内存区域处 于不稳定状态时,便执行步骤S407,优先在第二内存区域进行分配的步骤和填充的步骤,其 顺序和执行次数在这里不做限制。本发明实施例提供的内存管理方法,通过划分第二内存区域作为辅助区域,利用 局部压缩算法管理第一内存区域时,当第一内存区域处于不稳定状态时,从第二内存区域 中取出长度合适的第二内存块中数据来填充导致第一内存区域不稳定的空洞,由于仅需要 搬移导致第一内存区域不稳定的空洞大小的内存空间,该空洞的长度通常较小,从而大大 减少内存的搬移量,使得第一内存区域能够快速的恢复到稳定状态,进而在保证内存利用 率较高的情况下,进一步提高局部压缩算法的内存管理性能,从而使得局部压缩算法能够 较好的同时兼顾到内存利用率和内存管理性能。另外,在实施本发明过程中,发明人还发现现有技术中另外还存在如下问题采用 局部压缩算法进行内存管理时,一般还会存在申请空间和释放空间性能不一致的问题,具 体而言,局部压缩算法中释放空间比申请空间会造成更多的内存搬移,即释放空间的性能 远低于申请空间的性能,比如,对于在路由器上运行路由查找算法的应用场合而言,采用局 部压缩算法进行内存管理时,会出现删除表项的性能远低于添加表项的性能。采用本发明 实施例提供的内存管理方法,在释放空间时,可以直接取出长度合适的第二内存块中的数 据填充导致第一内存区域不稳定的空洞,从而大大减少了释放内存时大量的内存搬移,进 一步的解决了局部压缩算法中申请空间和释放空间性能不一致的问题。参见图8,本发明实施例提供另一种内存管理方法,包括如下步骤S801 将内存划分为第一内存区域和第二内存区域,采用局部压缩算法管理第一 内存区域。其中,划分出来第二内存区域作为辅助区域,用来辅助第一内存区域能够尽快的由不稳定状态恢复到稳定状态。相对第一内存区域而言,作为辅助区域的第二内存区域的 空间通常很小。S802 在该第二内存区域内创建W页,每页由长度相等的至少一个第二内存块连 续排列组成,其中页1中的第二内存块1的长度为1,页2中的第二内存块2的长度为2,依 次类推,页W中的第二内存块W的长度为W(本实施例中W为大于2的整数);其中W为预 先设定的单次申请/释放内存区域的最大长度,该最大长度可以根据具体的应用场合预先 设定。并管理每页的页信息,包括页首地址与第二内存块长度的对应关系、和第二内存 块的状态信息(空闲状态或非空闲状态)等。S803:当接收到内存申请时,假设本次申请的内存段长度为L,则判断页L中是否 有处于空闲状态的第二内存块(其中页L中的第二内存块的长度等于L),如果有,则分配页 L中任一空闲的第二内存块供使用,并修改该第二内存块的状态信息为非空闲状态,如果没 有则在第一内存区域进行分配。S804:当第一内存区域处于不稳定状态时,假设导致第一内存区域不稳定的空洞 的长度为R,则根据上述页信息判断页R中是否有处于非空闲状态的第二内存块(其中页R 中的第二内存块的长度等于R),如果有,则用页R中的任一非空闲的第二内存块中的数据 填充该空洞。当用第二内存块中的数据填充空洞之后,还包括再次判断第一内存区域是否恢复 稳定状态,否则再次在第二内存区域中取出合适长度的第二内存块中的数据来填充导致第 一内存区域不稳定的空洞,直至第一内存区域处于稳定状态为止。当取出第二内存块中的数据填充导致第一内存区域不稳定的空洞后,被取出数据 的第二内存块的状态便会恢复空闲状态,此时,需要修改相应的页信息,将其状态修改为空 闲状态,当再次有内存申请时,便可以被重新分配。本发明实施例提供的内存管理方法,通过划分包括W页的第二内存区域,在申请 内存时优先分配该W页中对应长度的第二内存块,当第一内存区域处于不稳定状态时,从 具有长度合适的第二内存块的页中,取出任一第二内存块中的数据,填充导致第一内存区 域不稳定的空洞,由于仅需要搬移导致第一内存区域不稳定的空洞大小的内存空间,该空 洞的长度通常较小,从而大大减少内存的搬移量,使得内存能够快速的恢复到稳定状态,进 而在保证内存利用率较高的情况下,进一步提高局部压缩算法的内存管理性能,从而使得 局部压缩算法能够较好的同时兼顾到内存利用率和内存管理性能;同时,本发明实施例中, 在有内存分配和填充时,都是直接到具有合适长度第二内存块的页中进行分配或取数据进 行填充,这种方式使得第二内存区域的维护和管理非常简单便捷。参见图9,本发明实施例提供再一种内存管理方法,包括如下步骤S901 将内存划分为第一内存区域和第二内存区域,采用局部压缩算法管理第一 内存区域。其中,划分出来第二内存区域作为辅助区域,用来辅助第一内存区域能够尽快的 由不稳定状态恢复到稳定状态。相对第一内存区域而言,作为辅助区域的第二内存区域的 空间通常很小。S902:当接收到内存申请时,判断所述第二内存区域中是否有大于或等于本次申请内存段长度的空洞,是则在所述空洞中进行分配,生成新的第二内存块,并管理所述第二 内存块长度和地址的对应关系;划分出来的第二内存区域在初始时整个区域是个大的空洞,整个区域均处于未被 使用的状态,当有内存申请时,优先在第二内存区域中进行分配,分配时先判断该第二内存 区域中是否有大于或等于本次申请内存段长度的空洞,是则在满足长度的任一空洞中进行 能够分配,被分配的区域形成一个新的第二内存块。由于第二内存区域是辅助区域,其空间相对第一内存区域而言通常很小,因此,能 够实现对第二内存块的长度和地址信息进行有效的管理和维护,即能够有效的实现对第二 内存块长度和地址的对应关系等进行管理。S903:第一内存区域处于不稳定状态时,用长度合适的第二内存块中的数据填充 导致所述第一内存区域不稳定的空洞。其中,判断导致第一内存区域不稳定的空洞的方法包括判断如果第一内存区域中数据段的长度小于调节因子与预设值的乘积,且该数据 段后的空洞长度小于预设值,则该空洞为导致第一内存区域不稳定的空洞;上述预设值为 预先设定的单次申请内存或单次释放内存的最大长度值。优选的,用长度合适的第二内存块中的数据填充导致所述第一内存区域不稳定的 空洞的方法可以是判断是否有与导致第一内存区域不稳定的空洞长度相等的第二内存块长度,是则 依据所述第二内存块长度和地址的对应关系,获取该第二内存块长度对应的地址,取出所 述地址对应的第二内存块中的数据,填充导致所述第一内存区域不稳定的空洞;或判断是否有多个第二内存块长度之和等于导致第一内存区域不稳定的空洞的长 度,是则依据所述第二内存块长度和地址的对应关系,获取该多个第二内存块长度分别对 应的多个地址;取出该多个地址对应的第二内存块中的数据,填充导致所述第一内存区域 不稳定的空洞。当用第二内存块中的数据填充空洞之后,还包括再次判断第一内存区域是否恢复 稳定状态,否则再次在第二内存区域中取出合适长度的第二内存块中的数据来填充导致第 一内存区域不稳定的空洞,直至第一内存区域处于稳定状态为止。当取出第二内存块中的数据填充导致第一内存区域不稳定的空洞后,被取出数据 的第二内存块便重新成为空洞,即重新处于未被使用状态,此时,当再次有内存申请时,可 以被重新分配。其中,步骤S902和步骤S903之间没有严格的顺序限定,当接收到内存申请时,便 执行步骤S902,当判断第一内存区域处于不稳定状态时,便执行步骤S903,步骤S902和步 骤S903其顺序和执行的次数在这里不做限制。本发明实施例提供的内存管理方法,通过划分第二内存区域作为辅助区域,利用 局部压缩算法管理第一内存区域时,当第一内存区域处于不稳定状态时,从第二内存区域 中取出长度合适的第二内存块的数据来填充导致第一内存区域不稳定的空洞,由于仅需要 搬移导致第一内存区域不稳定的空洞大小的内存空间,该空洞的长度通常较小,从而大大 减少内存的搬移量,使得第一内存区域能够快速的恢复到稳定状态,进而在保证内存利用 率较高的情况下,进一步提高局部压缩算法的内存管理性能,从而使得局部压缩算法能够较好的同时兼顾到内存利用率和内存管理性能。另外,在实施本发明过程中,发明人还发现现有技术中另外还存在如下问题采用 局部压缩算法进行内存管理时,一般还会存在申请空间和释放空间性能不一致的问题,具 体而言,局部压缩算法中释放空间比申请空间会造成更多的内存搬移,即释放空间的性能 远低于申请空间的性能,比如,对于在路由器上运行路由查找算法的应用场合而言,采用局 部压缩算法进行内存管理时,会出现删除表项的性能远低于添加表项的性能。采用本发明 实施例提供的内存管理方法,在释放空间时,可以直接取出长度合适的第二内存块中的数 据填充导致第一内存区域不稳定的空洞,从而大大减少了释放内存时大量的内存搬移,进 一步的解决了局部压缩算法中申请空间和释放空间性能不一致的问题。参见图10,本发明实施例提供一种内存管理系统,包括划分模块1001,用于将内存划分为第一内存区域和第二内存区域;管理模块1002,用于采用局部压缩算法管理第一内存区域;填充模块1003,用于所述第一内存区域处于不稳定状态时,用第二内存块中的数 据填充导致所述第一内存区域不稳定的空洞,所述第二内存块位于所述第二内存区域中。其中,划分出来第二内存区域作为辅助区域,用来辅助第一内存区域能够尽快的 由不稳定状态恢复到稳定状态。相对第一内存区域而言,作为辅助区域的第二内存区域的 空间通常很小。本发明实施例提供的内存管理系统,通过划分模块1001划分的第二内存区域作 为辅助区域,填充模块1003在第一内存区域处于不稳定状态时,从第二内存区域中取出长 度合适的第二内存块的数据来填充导致第一内存区域不稳定的空洞,由于仅需要搬移导致 第一内存区域不稳定的空洞大小的内存空间,该空洞的长度通常较小,从而大大减少内存 的搬移量,使得第一内存区域能够快速的恢复到稳定状态,进而在保证内存利用率较高的 情况下,进一步提高局部压缩算法的内存管理性能,从而使得局部压缩算法能够较好的同 时兼顾到内存利用率和内存管理性能。参见图11,在本发明的另一实施例中,所述系统还包括优先分配模块1101,用于 当接收到内存申请时,优先在所述第二内存区域中进行分配。本实施例中,内存申请时优先在第二内存区域中进行分配,当第二内存区域空间 不够时再在第一内存区域中进行分配,这样,可以使得第二内存区域能够有更多的数据用 于填充,更大程度的提高内存管理性能。参见图12,在本发明的另一实施例中,划分模块1001进一步包括页创建单元,用于在所述第二内存区域中创建至少一页,其中每页由长度相等的 至少一个第二内存块连续排列组成,所述第二内存块的长度小于或等于预先设定的单次申 请内存或单次释放内存的最大长度;页管理单元,用于管理所述页创建单元创建的页的页信息,包括每页的页首地址 与第二内存块长度的对应关系、和第二内存块的状态信息(空闲状态或非空闲状态)等。优先分配模块1101具体包括第一判断单元1201,用于判断是否有与本次申请内存段长度相等的第二内存块长 度,是则依据所述页首地址与第二内存块长度的对应关系,获取该第二内存块长度对应的 页首地址;
16
第二判断单元1202,用于在所述第一判断单元1201的判断结果为否时,判断是否 有大于本次申请内存段长度的第二内存块长度,是则依据所述页首地址与第二内存块长度 的对应关系,获取该第二内存块长度对应的页首地址;页分配单元1203,用于依据所述第二内存块的状态信息,在所述第一判断单元 1201或第二判断单元1202获取的页首地址对应的页内,分配处于空闲状态的第二内存块。相应的,所述填充模块1003包括第一填充单元,用于判断是否有与导致第一内存区域不稳定的空洞长度相等的第 二内存块长度,是则依据所述页首地址与第二内存块长度的对应关系,获取该第二内存块 长度对应的页首地址;依据所述第二内存块的状态信息,在所述页首地址对应的页内,取出 处于非空闲状态的第二内存块中的数据,填充导致所述第一内存区域不稳定的空洞;或第二填充单元,用于判断是否有多个第二内存块长度之和等于导致第一内存区域 不稳定的空洞长度,是则依据等于所述空洞长度所需的第二内存块长度与该第二内存块个 数的对应规则,和所述页首地址与第二内存块长度的对应关系,获取该多个第二内存块长 度分别对应的至少一个页首地址;依据所述第二内存块的状态信息,在该至少一个页首地 址对应的页内,取出相应长度和个数的处于非空闲状态的第二内存块中的数据,填充导致 所述第一内存区域不稳定的空洞。该实施例中提供的分配模块1001中,通过创建页来维护和管理第二内存区域,这 种方式使得第二内存区域的维护和管理非常简单便捷。参见图13,在本发明的再一个实施例中,所述优先分配模块1101具体包括混放分配单元1301,用于判断所述第二内存区域中有大于或等于本次申请内存段 长度的空洞时,在所述空洞中进行分配,生成新的第二内存块;块管理单元1302,用于管理所述第二内存块长度和地址的对应关系。相应的,所述填充模块1003具体包括第三填充单元,用于判断是否有与导致第一内存区域不稳定的空洞长度相等的第 二内存块长度,是则依据所述第二内存块长度和地址的对应关系,获取该第二内存块长度 对应的地址,取出所述地址对应的第二内存块中的数据,填充导致所述第一内存区域不稳 定的空洞;或第四填充单元,用于判断是否有多个第二内存块长度之和等于导致第一内存区域 不稳定的空洞的长度,是则依据所述第二内存块长度和地址的对应关系,获取该多个第二 内存块长度分别对应的多个地址;取出该多个地址对应的第二内存块中的数据,填充导致 所述第一内存区域不稳定的空洞。该实施例中第二内存区域采用将第二内存块混放,并管理第二内存块的长度和地 址信息进行管理,这种方式对于第二内存区域而言,内存利用率相对较高。上述系统实施例的具体实现方法请参照前述方法实施例,此处不再赘述。进一步的,在实施本发明过程中,发明人还发现现有技术中另外还存在如下问题 采用局部压缩算法进行内存管理时,一般还会存在申请空间和释放空间性能不一致的问 题,具体而言,局部压缩算法中释放空间比申请空间会造成更多的内存搬移,即释放空间的 性能远低于申请空间的性能,比如,对于在路由器上运行路由查找算法的应用场合而言,采 用局部压缩算法进行内存管理时,会出现删除表项的性能远低于添加表项的性能。采用本发明实施例提供的内存管理系统,在释放空间时,填充模块1003可以直接取出长度合适的 第二内存块中的数据填充导致第一内存区域不稳定的空洞,从而大大减少了释放内存时大 量的内存搬移,进一步的解决了局部压缩算法中申请空间和释放空间性能不一致的问题。需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实 体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存 在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵 盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要 素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备
所固有的要素。在没有更多限制的情况下,由语句“包括一个......”限定的要素,并不排
除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。本领域普通技术人员可以理解,实现上述实施例方法中的全部或部分步骤是可以 通过程序来指令相关的硬件来完成,所述的程序可以存储于一计算机可读取存储介质中, 该程序在执行时,包括若干指令用以执行本发明各个实施例所述的方法。这里所述的存储 介质,如ROM/RAM、磁碟、光盘等。以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在 本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围 内。
权利要求
一种内存管理方法,其特征在于,将内存划分为第一内存区域和第二内存区域,采用局部压缩算法管理第一内存区域,所述方法包括所述第一内存区域处于不稳定状态时,用第二内存块中的数据填充导致所述第一内存区域不稳定的空洞,所述第二内存块位于所述第二内存区域中。
2.根据权利要求1所述方法,其特征在于,所述方法还包括当接收到内存申请时,优 先在所述第二内存区域中进行分配。
3.根据权利要求2所述方法,其特征在于,所述方法还包括在所述第二内存区域中创建至少一页,并管理所述页的页信息;其中每页由长度相等 的至少一个第二内存块连续排列组成,所述第二内存块的长度小于或等于预先设定的单次 申请内存或单次释放内存的最大长度。
4.根据权利要求3所述方法,其特征在于,所述页信息包括页首地址与第二内存块长 度的对应关系、和第二内存块的状态信息;则优先在所述第二内存区域中进行分配包括判断是否有与本次申请内存段长度相等的第二内存块长度,是则依据所述页首地址与 第二内存块长度的对应关系,获取该第二内存块长度对应的页首地址;否则判断是否有大于本次申请内存段长度的第二内存块长度,是则依据所述页首地址 与第二内存块长度的对应关系,获取该第二内存块长度对应的页首地址;依据所述第二内存块的状态信息,在所述页首地址对应的页内分配处于空闲状态的第 二内存块。
5.根据权利要求4所述方法,其特征在于,用第二内存块中的数据填充导致所述第一 内存区域不稳定的空洞包括判断是否有与导致所述空洞长度相等的第二内存块长度,是则依据所述页首地址与第 二内存块长度的对应关系,获取该第二内存块长度对应的页首地址;依据所述第二内存块 的状态信息,在所述页首地址对应的页内,取出处于非空闲状态的第二内存块中的数据,填 充导致所述第一内存区域不稳定的空洞;或判断是否有多个第二内存块长度之和等于所述空洞长度,是则依据等于所述空洞长 度所需的第二内存块长度与个数的对应规则,和所述页首地址与第二内存块长度的对应关 系,获取该多个第二内存块长度分别对应的至少一个页首地址;依据所述第二内存块的状 态信息,在该至少一个页首地址对应的页内,取出相应长度和个数的处于非空闲状态的第 二内存块中的数据,填充导致所述第一内存区域不稳定的空洞。
6.根据权利要求2所述方法,其特征在于,优先在所述第二内存区域中进行分配包括判断所述第二内存区域中是否有大于或等于本次申请内存段长度的空洞,是则在所述空洞中进行分配,生成新的第二内存块,并管理所述第二内存块长度和地址的对应关系。
7.根据权利要求6所述方法,其特征在于,用第二内存块中的数据填充导致所述第一 内存区域不稳定的空洞包括判断是否有与导致第一内存区域不稳定的空洞长度相等的第二内存块长度,是则依据 所述第二内存块长度和地址的对应关系,获取该第二内存块长度对应的地址,取出所述地 址对应的第二内存块中的数据,填充导致所述第一内存区域不稳定的空洞;或判断是否有多个第二内存块长度之和等于导致第一内存区域不稳定的空洞的长度,是则依据所述第二内存块长度和地址的对应关系,获取该多个第二内存块长度分别对应的多 个地址;取出该多个地址对应的第二内存块中的数据,填充导致所述第一内存区域不稳定 的空洞。
8.根据权利要求1所述方法,其特征在于,判断导致所述第一内存区域不稳定的空洞 的方法包括判断如果所述第一内存区域中数据段的长度小于调节因子与预设值的乘积,且该数据 段后的空洞长度小于预设值,则该空洞为导致所述第一内存区域不稳定的空洞;所述预设 值为预先设定的单次申请内存或单次释放内存的最大长度值。
9.一种内存管理系统,其特征在于,包括划分模块,用于将内存划分为第一内存区域和第二内存区域;管理模块,用于采用局部压缩算法管理第一内存区域;填充模块,用于所述第一内存区域处于不稳定状态时,用第二内存块中的数据填充导 致所述第一内存区域不稳定的空洞,所述第二内存块位于所述第二内存区域中。
10.根据权利要求9所述系统,其特征在于,所述系统还包括优先分配模块,用于当接 收到内存申请时,优先在所述第二内存区域中进行分配。
11.根据权利要求10所述系统,其特征在于,所述划分模块还包括页创建单元,用于在所述第二内存区域中创建至少一页,其中每页由长度相等的至少 一个第二内存块连续排列组成,所述第二内存块的长度小于或等于预先设定的单次申请内 存或单次释放内存的最大长度;页管理单元,用于管理所述页创建单元创建的页的页信息。
12.根据权利要求11所述系统,其特征在于,所述页信息包括页首地址与第二内存块 长度的对应关系、和第二内存块的状态信息;所述优先分配模块包括第一判断单元,用于判断是否有与本次申请内存段长度相等的第二内存块长度,是则 依据所述页首地址与第二内存块长度的对应关系,获取该第二内存块长度对应的页首地 址;第二判断单元,用于在所述第一判断单元的判断结果为否时,判断是否有大于本次申 请内存段长度的第二内存块长度,是则依据所述页首地址与第二内存块长度的对应关系, 获取该第二内存块长度对应的页首地址;页分配单元,用于依据所述第二内存块的状态信息,在所述第一判断单元或第二判断 单元获取的页首地址对应的页内,分配处于空闲状态的第二内存块。
13.根据权利要求12所述系统,其特征在于,所述填充模块包括第一填充单元,用于判断是否有与导致第一内存区域不稳定的空洞长度相等的第二内 存块长度,是则依据所述页首地址与第二内存块长度的对应关系,获取该第二内存块长度 对应的页首地址;依据所述第二内存块的状态信息,在所述页首地址对应的页内,取出处于 非空闲状态的第二内存块中的数据,填充导致所述第一内存区域不稳定的空洞;或第二填充单元,用于判断是否有多个第二内存块长度之和等于导致第一内存区域不稳 定的空洞长度,是则依据等于所述空洞长度所需的第二内存块长度与个数的对应规则,和 所述页首地址与第二内存块长度的对应关系,获取该多个第二内存块长度分别对应的至少一个页首地址;依据所述第二内存块的状态信息,在该至少一个页首地址对应的页内,取出 相应长度和个数的处于非空闲状态的第二内存块中的数据,填充导致所述第一内存区域不 稳定的空洞。
14.根据权利要求10所述系统,其特征在于,所述优先分配模块包括混放分配单元,用于判断所述第二内存区域中有大于或等于本次申请内存段长度的空 洞时,在所述空洞中进行分配,生成新的第二内存块;块管理单元,用于管理所述第二内存块长度和地址的对应关系。
15.根据权利要求14所述系统,其特征在于,所述填充模块包括第三填充单元,用于判断是否有与导致第一内存区域不稳定的空洞长度相等的第二内 存块长度,是则依据所述第二内存块长度和地址的对应关系,获取该第二内存块长度对应 的地址,取出所述地址对应的第二内存块中的数据,填充导致所述第一内存区域不稳定的 空洞;或第四填充单元,用于判断是否有多个第二内存块长度之和等于导致第一内存区域不稳 定的空洞的长度,是则依据所述第二内存块长度和地址的对应关系,获取该多个第二内存 块长度分别对应的多个地址;取出该多个地址对应的第二内存块中的数据,填充导致所述 第一内存区域不稳定的空洞。
全文摘要
本发明公开了一种内存管理方法和内存管理系统,涉及信息技术领域。所述方法将内存划分为第一内存区域和第二内存区域,采用局部压缩算法管理第一内存区域,所述第一内存区域处于不稳定状态时,用第二内存块中的数据填充导致所述第一内存区域不稳定的空洞,所述第二内存块位于所述第二内存区域中。所述系统包括划分模块、管理模块和填充模块。采用填充方式可以大大减小内存的搬移量,使内存能快速恢复到稳定状态,进而在保证内存利用率较高的情况下,进一步提高局部压缩算法的内存管理性能,进而使局部压缩算法能较好的兼顾到内存利用率和内存管理性能。
文档编号G06F12/02GK101923511SQ20091014733
公开日2010年12月22日 申请日期2009年6月11日 优先权日2009年6月11日
发明者钱俊 申请人:华为技术有限公司