《一种内存管理方法和装置.pdf》由会员分享,可在线阅读,更多相关《一种内存管理方法和装置.pdf(22页珍藏版)》请在专利查询网上搜索。
1、(10)申请公布号 CN 103077126 A(43)申请公布日 2013.05.01CN103077126A*CN103077126A*(21)申请号 201210566185.3(22)申请日 2012.12.24G06F 12/08(2006.01)G06F 17/30(2006.01)(71)申请人中兴通讯股份有限公司地址 518057 广东省深圳市南山区高新技术产业园科技南路中兴通讯大厦法务部(72)发明人刘强(74)专利代理机构北京派特恩知识产权代理事务所(普通合伙) 11270代理人张颖玲 王黎延(54) 发明名称一种内存管理方法和装置(57) 摘要本发明公开了一种内存管理方法。
2、,将内存划分为一阶以上内存池,每阶内存池具有至少一个管理节点,申请内存时,根据申请内存大小确定出阶内存池,再根据内存池管理列表中阶内存池的占用情况为内存申请分配内存;释放内存时,根据需释放内存的标记信息,对内存进行释放;同时本发明还公开了一种内存管理装置;本发明中的内存块基本长度可变、灵活性强、内存资源利用率高,可适用于不同内存资源需求的嵌入式系统或操作系统。(51)Int.Cl.权利要求书4页 说明书15页 附图2页(19)中华人民共和国国家知识产权局(12)发明专利申请权利要求书4页 说明书15页 附图2页(10)申请公布号 CN 103077126 ACN 103077126 A1/4页。
3、21.一种内存管理方法,其特征在于,将内存划分为一阶以上内存池,每阶内存池具有至少一个管理节点;该方法还包括:申请内存时,根据申请内存大小确定出阶内存池,再根据内存池管理列表中阶内存池的占用情况为内存申请分配内存;释放内存时,根据需释放内存的标记信息,对内存进行释放。2.根据权利要求1所述的内存管理方法,其特征在于,所述内存池管理列表处于初始化初期阶段;所述申请内存时,根据申请内存大小确定出阶内存池,并根据内存池管理列表中阶内存池的占用情况为内存申请分配内存为:依据申请内存大小确定选择因子,并根据选择因子确定出内存池的阶数i;判断阶数i是否等于最高阶内存池,当阶数i内存池为最高阶内存池且最高阶。
4、内存池存在有满足条件的管理节点,则申请内存成功,标识满足条件的管理节点;当阶数i内存池为最高阶内存池、但最高阶内存池不存在能够满足条件的管理节点,则最高阶内存池生成一个管理节点,申请内存成功,标识生成的管理节点;当阶数i内存池不是最高阶内存池,则第i阶内存池内存向第i+L阶内存池进行内存申请,第i+L阶内存池不是最高阶内存池时,第i+L阶内存池继续向第i+2L阶内存池进行内存申请,以此类推,直到申请到最高阶内存池;由最高阶内存池的管理节点分配内存给第i+nL阶,第i+nL阶接收到内存分配后,生成管理节点,并分配内存给第i+(n-1)L阶内存池,第i+(n-1)L阶内存池接收到内存分配后,生成管。
5、理节点,并分配内存给第i+(n-2)L阶内存池,以此类推,直到第i阶内存池接收到分配后,生成第i阶内存池的管理节点;由生成的管理节点为内存申请进行内存分配,申请内存成功,标识生成的管理节点;其中,i+nL为小于等于12的正整数,n、L均为小于等于12的正整数。3.根据权利要求2所述的内存管理方法,其特征在于,所述内存池管理列表初始化完成之后,所述申请内存时,根据申请内存大小确定出阶内存池,并根据内存池管理列表中阶内存池的占用情况为内存申请分配内存为:依据申请内存大小确定选择因子,并根据选择因子确定出内存池的阶数i;查找第i阶内存池存在的所有管理节点,是否存在有满足条件的管理节点;能够在第i阶内。
6、存池查找到满足条件的管理节点,则内存申请成功,标识满足条件的管理节点;不能够在第i阶内存池查找到满足条件的管理节点,再判断第i阶内存池剩余内存长度是否大于等于申请内存长度;当第i阶内存池剩余内存长度大于等于申请内存长度,生成一个管理节点,标识所生成的管理节点;当第i阶内存池剩余内存长度小于申请内存长度,则查找第i+L阶内存池的所有管理节点是否存在满足条件的管理节点,能够查找到则确认申请内存成功,标识满足条件的管理节点;在第i+L阶内存池中查找不到满足条件的管理节点,再判断第i+L阶内存池剩余内存长度是否大于等于申请内存长度;当第i+L阶内存池剩余内存长度大于等于申请内存长度,生成一个管理节点,。
7、标识所生成的管理节点;当第i+L阶内存池剩余内存长度小于申请内存长度,查找第i+2L阶内存权 利 要 求 书CN 103077126 A2/4页3池的所有管理节点是否存在满足条件的管理节点,以此类推,直至查找到满足条件的管理节点,申请内存成功,标识满足条件的管理节点;或者,直至查找到最高阶内存池不存在有满足条件的管理节点且剩余内存长度小于内存申请长度,则查找第i-1阶内存池所有管理节点是否存在有满足条件的管理节点,存在满足条件的管理节点,申请内存成功,标识满足条件的管理节点;不存在满足条件的管理节点,继续查找第i-2阶内存池所有管理节点,以此类推,直至能查找到满足条件的管理节点,申请内存成功,。
8、标识满足条件的管理节点;直至查找到第0阶内存池仍然不存在满足条件的管理节点,申请内存失败。4.根据权利要求1、2或3所述的内存管理方法,其特征在于,所述释放内存时,根据需释放内存的标记信息,对内存进行释放为:释放内存时,查找起始地址,查找到起始地址之后,释放申请长度的内存块。5.根据权利要求4所述的内存管理方法,其特征在于,所述内存进行释放后,该方法还包括:先判断已释放内存所属管理节点可管理的其它内存块是否全部为空闲内存块,如果不是,则释放内存流程结束;如果是,则释放所述管理节点;判断在所述管理节点所属的阶内存池中,与所述管理节点具有同一个父节点的其它管理节点可管理的所有内存块是否全部为空闲内。
9、存块,如果不是,则释放内存流程结束;如果是,则释放与所述管理节点具有同一个父节点的其它管理节点,同时释放所述管理节点的父节点;继续判断与所述管理节点的父节点具有同一个父节点的其它管理节点可管理的所有内存块是否全部为空闲内存块,如果不是,则释放流程结束;如果是,则释放与所述管理节点的父节点具有同一个父节点的其它管理节点、释放管理节点的祖父节点;继续判断在所述管理节点的祖父节点的所属阶内存池中,是否有与所述管理节点的祖父节点具有同一个父节点的其它管理节点可管理的所有内存块是否全部为空闲内存块,如果不是,则释放内存流程结束;如果是,则释放与所述管理节点的祖父节点具有同一个父节点的其它管理节点,释放所。
10、述管理节点的祖父节点的父节点;以此类推,直到判断到最高阶内存池。6.一种内存管理装置,其特征在于,该装置包括:内存申请管理模块、内存释放管理模块和内存池管理列表;其中,所述内存申请管理模块,用于申请内存时,根据申请内存大小确定出阶内存池,再根据所述内存池管理列表中阶内存池的占用情况为内存申请分配内存;所述内存释放管理模块,用于释放内存时,根据释放内存标记信息,对所述内存池管理列表中的内存进行释放;所述内存池管理列表,用于为内存申请管理模块和内存释放管理模块提供内存;所述内存划分为一阶以上内存池,每阶内存池具有至少一个管理节点。7.根据权利要求6所述的内存管理装置,其特征在于,所述内存申请管理模。
11、块用于:在所述内存池管理列表初始化初期阶段,依据接收到的申请内存大小确定选择因子,再确定出阶数i;并判断第i阶内存池是否为最高阶内存池;当判断出为最高阶内存池,查找最高阶内存池中是否存在有能够满足条件的管理节点,当查找出有满足条件的管理节点时,内存申请成功,标识满足条件的管理节点;权 利 要 求 书CN 103077126 A3/4页4当判断出为最高阶内存池,且在最高阶内存池查找不到能够满足条件的管理节点时,驱动所述内存池管理列表生成最高阶内存池的一个管理节点,内存申请成功,标识所生成的管理节点;当判断出第i阶内存池不是最高阶内存池时,向所述内存池管理列表中的第i阶内存池申请内存,如果第i阶内。
12、存池无管理节点,则第i阶内存池向第i+L阶内存池进行内存申请;当判断出第i+L阶内存池是最高阶内存池时,查找最高阶内存池中是否存在有能够满足条件的管理节点,当查找出有满足条件的管理节点时,内存申请成功,标识满足条件的管理节点;当查找不到有满足条件的管理节点时,驱动所述内存池管理列表生成最高阶内存池的一个管理节点,内存申请成功,标识所生成的管理节点;当判断出第i+L阶内存池不是最高阶内存池时,第i+L阶内存池向第i+2L阶内存池进行内存申请;以此类推,直至申请到最高阶内存池,由最高阶内存池的管理节点给第i+mL阶内存池分配内存,第i+mL阶内存池接收分配内存后,驱动所述内存池管理列表生成一个管理。
13、节点,由所生成的管理节点给第i+(m-1)L阶内存池分配内存,第i+(m-1)L阶内存池接收到分配后,驱动所述内存池管理列表生成一个管理节点,由所生成的管理节点分配给第i+(m-2)L阶内存池分配内存,以此类推,直至第i阶内存池接收到分配后,驱动所述内存池管理列表生成第i阶内存池的一个管理节点,申请内存成功,标识所生成的管理节点;这里,i+mL为小于等于12的正整数、m、L均为小于等于12的正整数。8.根据权利要求7所述的内存管理装置,其特征在于,所述内存申请管理模块还用于:在内存池管理列表初始化完成之后,依据接收到的申请内存的大小确定选择因子,再确定出阶数i;查找第i阶内存池存在的所有管理节。
14、点,是否存在有满足条件的管理节点,能够在第i阶内存池查找到满足条件的管理节点,则内存申请成功,驱动所述内存池管理列表对该管理节点进行标识;在第i阶内存池查找不到满足条件的管理节点,则再判断第i阶内存池剩余内存长度是否大于等于内存申请长度,当第i阶内存池剩余内存长度大于等于申请内存长度时,驱动所述内存池管理列表生成一个管理节点,并标识所生成的管理节点;当第i阶内存池剩余内存长度小于申请内存长度时,查找第i+L阶内存池的所有管理节点是否存在有满足条件的管理节点,能够查找到就确认内存申请成功,驱动所述内存池管理列表标识满足条件的管理节点;在第i+L阶内存池查找不到,再判断第i+L阶内存池剩余内存长度。
15、是否大小等于内存申请长度,当第i+L阶内存池剩余内存长度大于等于申请内存长度时,驱动所述内存池管理列表生成一个管理节点,并标识所生成的管理节点;当第i+L阶内存池剩余内存长度小于申请内存长度时,继续查找第i+2L阶内存池的所有管理节点是否存在满足条件的管理节点,以此类推,直至查找到满足条件的管理节点,内存申请成功,驱动所述内存池管理列表标识满足条件的管理节点;权 利 要 求 书CN 103077126 A4/4页5或者,直至查找到最高阶内存池也不存在有满足条件的管理节点且剩余内存长度小于内存申请长度,转向查找第i-1阶内存池所有管理节点是否存在有满足条件的管理节点,存在满足条件的管理节点,内存。
16、申请成功,标识满足条件的管理节点;不存在满足条件的管理节点,查找第i-2阶内存池所有管理节点;以此类推,直至能查找到满足条件的管理节点,内存申请成功,标识满足条件的管理节点;或查找到第0阶内存池仍然不存在满足条件的管理节点,确认此次申请内存失败。9.根据权利要求6、7、8所述的内存管理装置,其特征在于,所述内存释放管理模块,用于在接收到释放内存请求后,查找起始地址,查找到之后驱动所述内存池管理列表释放申请长度的内存块。10.根据权利要求9所述的内存管理装置,其特征在于,所述内存释放管理模块,还用于在释放内存后,判断释放内存所属管理节点可管理的其它内存块是否全部为空闲内存块,如果不是,则释放内存。
17、结束;如果是,则驱动所述内存池管理列表释放该管理节点;之后,判断在所述管理节点所属的阶内存池中,与所述管理节点具有同一个父节点的其它管理节点可管理的所有内存块是否全部为空闲内存块;如果不是,释放内存结束;如果是,则驱动所述内存池管理列表释放与该管理节点具有同一个父节点的其它管理节点,同时释放该管理节点的父节点;然后,再判断与所述管理节点的父节点具有同一个负节点的其它管理节点可管理的所有内存块是否全部为空闲内存块,如果不是,释放内存结束;如果是,则驱动所述内存池管理列表释放所述管理节点的父节点具有同一个负节点的其它管理节点,释放所述管理节点的祖父节点;在管理节点的祖父节点的所属阶内存池中,判断与。
18、所述管理节点的祖父节点具有同一个父节点的其它管理节点可管理的所有内存块是否全部为空闲内存块,如果不是,则释放内存结束;如果是,则驱动所述内存池管理列表释放与所述管理节点的祖父节点具有同一个父节点的其它管理节点、释放所述管理节点的祖父节点的父节点;以此类推,直到判断到最高阶内存池。权 利 要 求 书CN 103077126 A1/15页6一种内存管理方法和装置技术领域0001 本发明涉及内存管理技术,具体涉及一种内存管理方法和装置。背景技术0002 因嵌入式系统应用广泛,如何对嵌入式系统内存进行高效管理成为了研究热点。0003 目前,在嵌入系统中,主要采用两种内存管理方法:一种是静态内存管理方法。
19、,另一种是动态内存管理方法;这里,对内存管理主要涉及到内存申请与内存释放;其中,0004 静态内存管理方法,事先将内存划分为几个区,再将几个区划分为多个大小相等的内存块;当有内存申请时,如果预申请的内存大小与内存块或区内存大小相等或相近,内存利用率较高;但是,如果预申请的内存很小,则很小的预申请内存却占用了很大的内存块,因灵活性较差,就会造成内存利用率低。0005 动态内存管理方法,通常通过链表或栈方法来实现;其中,链表方法利用链表将空闲内存块排列,当进程需要申请内存时,从链表的头部开始搜索空闲内存块,直到搜索到大小合适的内存块,将搜索到的内存块分配给申请内存的进程使用;当有内存块释放时,链表。
20、方法将已经释放的内存块即空闲内存块放在链表的尾部;栈方法与链表方法类似,将空闲内存块排列在栈顶,当有进程申请内存时,从栈顶开始搜索,直到搜索出大小合适的内存块;当有内存块释放时,将已经释放的内存块即空闲内存块排放在栈顶;在嵌入式系统中,动态内存管理方法应用得很多,但是,因为嵌入式系统需要不断地对内存进行申请和释放,即嵌入式系统需要不断地对内存进行动态分配,加重了系统本身资源运行负担。发明内容0006 有鉴于此,本发明的主要目的在于提供一种内存管理方法和装置,可提高内存申请和释放灵活性,减轻嵌入式系统资源运行负担。0007 为达到上述目的,本发明的技术方案是这样实现的:0008 本发明提供了一种。
21、内存管理方法,将内存划分为一阶以上内存池,每阶内存池具有至少一个管理节点;该方法还包括:0009 申请内存时,根据申请内存大小确定出阶内存池,再根据内存池管理列表中阶内存池的占用情况为内存申请分配内存;0010 释放内存时,根据需释放内存的标记信息,对内存进行释放。0011 上述方案中,所述内存池管理列表处于初始化初期阶段;0012 所述申请内存时,根据申请内存大小确定出阶内存池,并根据内存池管理列表中阶内存池的占用情况为内存申请分配内存为:0013 依据申请内存大小确定选择因子,并根据选择因子确定出内存池的阶数i;0014 判断阶数i是否等于最高阶内存池,当阶数i内存池为最高阶内存池且最高阶。
22、内存池存在有满足条件的管理节点,则申请内存成功,标识满足条件的管理节点;0015 当阶数i内存池为最高阶内存池、但最高阶内存池不存在能够满足条件的管理节说 明 书CN 103077126 A2/15页7点,则最高阶内存池生成一个管理节点,申请内存成功,标识生成的管理节点;0016 当阶数i内存池不是最高阶内存池,则第i阶内存池内存向第i+L阶内存池进行内存申请,第i+L阶内存池不是最高阶内存池时,第i+L阶内存池继续向第i+2L阶内存池进行内存申请,以此类推,直到申请到最高阶内存池;由最高阶内存池的管理节点分配内存给第i+nL阶,第i+nL阶接收到内存分配后,生成管理节点,并分配内存给第i+(。
23、n-1)L阶内存池,第i+(n-1)L阶内存池接收到内存分配后,生成管理节点,并分配内存给第i+(n-2)L阶内存池,以此类推,直到第i阶内存池接收到分配后,生成第i阶内存池的管理节点;由生成的管理节点为内存申请进行内存分配,申请内存成功,标识生成的管理节点;0017 其中,i+nL为小于等于12的正整数,n、L均为小于等于12的正整数。0018 上述方案中,所述内存池管理列表初始化完成之后,所述申请内存时,根据申请内存大小确定出阶内存池,并根据内存池管理列表中阶内存池的占用情况为内存申请分配内存为:0019 依据申请内存大小确定选择因子,并根据选择因子确定出内存池的阶数i;0020 查找第i。
24、阶内存池存在的所有管理节点,是否存在有满足条件的管理节点;0021 能够在第i阶内存池查找到满足条件的管理节点,则内存申请成功,标识满足条件的管理节点;0022 不能够在第i阶内存池查找到满足条件的管理节点,再判断第i阶内存池剩余内存长度是否大于等于申请内存长度;0023 当第i阶内存池剩余内存长度大于等于申请内存长度,生成一个管理节点,标识所生成的管理节点;0024 当第i阶内存池剩余内存长度小于申请内存长度,则查找第i+L阶内存池的所有管理节点是否存在满足条件的管理节点,能够查找到则确认申请内存成功,标识满足条件的管理节点;在第i+L阶内存池中查找不到满足条件的管理节点,再判断第i+L阶内。
25、存池剩余内存长度是否大于等于申请内存长度;0025 当第i+L阶内存池剩余内存长度大于等于申请内存长度,生成一个管理节点,标识所生成的管理节点;当第i+L阶内存池剩余内存长度小于申请内存长度,查找第i+2L阶内存池的所有管理节点是否存在满足条件的管理节点,0026 以此类推,直至查找到满足条件的管理节点,申请内存成功,标识满足条件的管理节点;或者,直至查找到最高阶内存池不存在有满足条件的管理节点且剩余内存长度小于内存申请长度,则查找第i-1阶内存池所有管理节点是否存在有满足条件的管理节点,存在满足条件的管理节点,申请内存成功,标识满足条件的管理节点;不存在满足条件的管理节点,继续查找第i-2阶。
26、内存池所有管理节点,以此类推,直至能查找到满足条件的管理节点,申请内存成功,标识满足条件的管理节点;直至查找到第0阶内存池仍然不存在满足条件的管理节点,申请内存失败。0027 上述方案中,所述释放内存时,根据需释放内存的标记信息,对内存进行释放为:释放内存时,查找起始地址,查找到起始地址之后,释放申请长度的内存块。0028 上述方案中,所述内存进行释放后,该方法还包括:先判断已释放内存所属管理节点可管理的其它内存块是否全部为空闲内存块,如果不是,则释放内存流程结束;如果是,则释放所述管理节点;说 明 书CN 103077126 A3/15页80029 判断在所述管理节点所属的阶内存池中,与所述。
27、管理节点具有同一个父节点的其它管理节点可管理的所有内存块是否全部为空闲内存块,如果不是,则释放内存流程结束;如果是,则释放与所述管理节点具有同一个父节点的其它管理节点,同时释放所述管理节点的父节点;0030 继续判断与所述管理节点的父节点具有同一个父节点的其它管理节点可管理的所有内存块是否全部为空闲内存块,如果不是,则释放流程结束;如果是,则释放与所述管理节点的父节点具有同一个父节点的其它管理节点、释放管理节点的祖父节点;0031 继续判断在所述管理节点的祖父节点的所属阶内存池中,是否有与所述管理节点的祖父节点具有同一个父节点的其它管理节点可管理的所有内存块是否全部为空闲内存块,如果不是,则释。
28、放内存流程结束;如果是,则释放与所述管理节点的祖父节点具有同一个父节点的其它管理节点,释放所述管理节点的祖父节点的父节点;0032 以此类推,直到判断到最高阶内存池。0033 本发明还提供了一种内存管理装置,该装置包括:内存申请管理模块、内存释放管理模块和内存池管理列表;其中,0034 所述内存申请管理模块,用于申请内存时,根据申请内存大小确定出阶内存池,并根据所述内存池管理列表中阶内存池的占用情况为内存申请分配内存;0035 所述内存释放管理模块,用于释放内存时,根据释放内存标记信息,对所述内存池管理列表中的内存进行释放;0036 所述内存池管理列表,用于为内存申请管理模块和内存释放管理模块。
29、提供内存;所述内存划分为一阶以上内存池,每阶内存池具有至少一个管理节点。0037 上述方案中,所述内存申请管理模块用于:0038 在所述内存池管理列表初始化初期阶段,依据接收到的申请内存大小确定选择因子,再确定出阶数i;并判断第i阶内存池是否为最高阶内存池;0039 当判断出为最高阶内存池,查找最高阶内存池中是否存在有能够满足条件的管理节点,当查找出有满足条件的管理节点时,内存申请成功,标识满足条件的管理节点;0040 当判断出为最高阶内存池,且在最高阶内存池查找不到能够满足条件的管理节点时,驱动所述内存池管理列表生成最高阶内存池的一个管理节点,内存申请成功,标识所生成的管理节点;0041 当。
30、判断出第i阶内存池不是最高阶内存池时,向所述内存池管理列表中的第i阶内存池申请内存,如果第i阶内存池无管理节点,则第i阶内存池向第i+L阶内存池进行内存申请;0042 当判断出第i+L阶内存池是最高阶内存池时,查找最高阶内存池中是否存在有能够满足条件的管理节点,当查找出有满足条件的管理节点时,内存申请成功,标识满足条件的管理节点;当查找不到有满足条件的管理节点时,驱动所述内存池管理列表生成最高阶内存池的一个管理节点,内存申请成功,标识所生成的管理节点;0043 当判断出第i+L阶内存池不是最高阶内存池时,第i+L阶内存池向第i+2L阶内存池进行内存申请;0044 以此类推,直至申请到最高阶内存。
31、池,由最高阶内存池的管理节点给第i+mL阶内存池分配内存,第i+mL阶内存池接收分配内存后,驱动所述内存池管理列表生成一个管说 明 书CN 103077126 A4/15页9理节点,由所生成的管理节点给第i+(m-1)L阶内存池分配内存,第i+(m-1)L阶内存池接收到分配后,驱动所述内存池管理列表生成一个管理节点,由所生成的管理节点分配给第i+(m-2)L阶内存池分配内存,以此类推,直至第i阶内存池接收到分配后,驱动所述内存池管理列表生成第i阶内存池的一个管理节点,申请内存成功,标识所生成的管理节点;0045 这里,i+mL为小于等于12的正整数、m、L均为小于等于12的正整数。0046 上。
32、述方案中,所述内存申请管理模块还用于:0047 在内存池管理列表初始化完成之后,依据接收到的申请内存的大小确定选择因子,再确定出阶数i;0048 查找第i阶内存池存在的所有管理节点,是否存在有满足条件的管理节点,0049 能够在第i阶内存池查找到满足条件的管理节点,则内存申请成功,驱动所述内存池管理列表对该管理节点进行标识;0050 在第i阶内存池查找不到满足条件的管理节点,则再判断第i阶内存池剩余内存长度是否大于等于内存申请长度,0051 当第i阶内存池剩余内存长度大于等于申请内存长度时,驱动所述内存池管理列表生成一个管理节点,并标识所生成的管理节点;0052 当第i阶内存池剩余内存长度小于。
33、申请内存长度时,查找第i+L阶内存池的所有管理节点是否存在有满足条件的管理节点,能够查找到就确认内存申请成功,驱动所述内存池管理列表标识满足条件的管理节点;在第i+L阶内存池查找不到,再判断第i+L阶内存池剩余内存长度是否大小等于内存申请长度,0053 当第i+L阶内存池剩余内存长度大于等于申请内存长度时,驱动所述内存池管理列表生成一个管理节点,并标识所生成的管理节点;0054 当第i+L阶内存池剩余内存长度小于申请内存长度时,继续查找第i+2L阶内存池的所有管理节点是否存在满足条件的管理节点,0055 以此类推,直至查找到满足条件的管理节点,内存申请成功,驱动所述内存池管理列表标识满足条件的。
34、管理节点;0056 或者,直至查找到最高阶内存池也不存在有满足条件的管理节点且剩余内存长度小于内存申请长度,转向查找第i-1阶内存池所有管理节点是否存在有满足条件的管理节点,存在满足条件的管理节点,内存申请成功,标识满足条件的管理节点;不存在满足条件的管理节点,查找第i-2阶内存池所有管理节点;以此类推,直至能查找到满足条件的管理节点,内存申请成功,标识满足条件的管理节点;或查找到第0阶内存池仍然不存在满足条件的管理节点,确认此次申请内存失败。0057 上述方案中,所述内存释放管理模块,用于在接收到释放内存请求后,查找起始地址,查找到之后驱动所述内存池管理列表释放申请长度的内存块。0058 上。
35、述方案中,所述内存释放管理模块,还用于在释放内存后,判断释放内存所属管理节点可管理的其它内存块是否全部为空闲内存块,如果不是,则释放内存结束;如果是,则驱动所述内存池管理列表释放该管理节点;0059 之后,判断在所述管理节点所属的阶内存池中,与所述管理节点具有同一个父节点的其它管理节点可管理的所有内存块是否全部为空闲内存块;如果不是,释放内存结束;如果是,则驱动所述内存池管理列表释放与该管理节点具有同一个父节点的其它管理节说 明 书CN 103077126 A5/15页10点,同时释放该管理节点的父节点;0060 然后,再判断与所述管理节点的父节点具有同一个负节点的其它管理节点可管理的所有内存。
36、块是否全部为空闲内存块,如果不是,释放内存结束;如果是,则驱动所述内存池管理列表释放所述管理节点的父节点具有同一个负节点的其它管理节点,释放所述管理节点的祖父节点;0061 在管理节点的祖父节点的所属阶内存池中,判断与所述管理节点的祖父节点具有同一个父节点的其它管理节点可管理的所有内存块是否全部为空闲内存块,如果不是,则释放内存结束;如果是,则驱动所述内存池管理列表释放与所述管理节点的祖父节点具有同一个父节点的其它管理节点、释放所述管理节点的祖父节点的父节点;0062 以此类推,直到判断到最高阶内存池。0063 本发明所提供的内存管理方法和装置,将内存划分为一阶以上内存池,当有进程申请内存时,。
37、内存申请管理模块根据申请内存大小确定出阶内存池,再根据内存池管理列表中阶内存池的占用情况为内存申请分配内存;当有进程释放内存时,根据需释放内存在内存池管理列表中的标记信息,进行内存释放;本发明的内存池管理列表的内存块基本长度可变,灵活性强,可根据不同类型的嵌入式系统需求,实时调整内存块基本长度,提高了内存资源利用率,减轻了嵌入式系统资源的运行负担。附图说明0064 图1为本发明内存池管理列表的组成结构示意图;0065 图2为本发明内存管理方法的实现流程示意图;0066 图3为本发明内存管理装置的组成结构示意图。具体实施方式0067 在对本发明内存管理方法描述之前,先对本发明的内存池管理列表进行。
38、说明,如图1所示,以最高阶内存池为第12阶内存池为例进行说明,所述内存池管理列表,将内存划分为第0阶(Order)内存池-第12阶内存池共13阶内存池,每阶内存池具有至少一个管理节点,每个管理节点均管理256块内存块;实质上,申请内存即为申请管理节点管理的256块内存块中的至少一块,申请成功之后,被占用的内存块称为已申请内存块;释放内存即为释放管理节点管理的256块内存块中的至少一块,被释放的内存块称为空闲内存块,所述空闲内存块可以用于下一次内存申请。0068 这里,为方便内存池管理列表的使用,需引入内存块基本长度的概念,通常,取内存块基本长度为2P字节(B,Byte)(P为正整数),那么,第0阶内存池的每个内存块基本长度为2P字节,第i阶内存池的每个内存块基本长度为2P*(2i)字节,其中,i为1至12中任意值;0069 本文中,仅以所述内存池管理列表划分为从第0阶内存池到第12阶内存池共13阶内存池为例进行说明,在实际应用中,所述内存池管理列表还可以划分为从第0阶内存池到第Y阶内存池共(Y+1)阶内存池,其中Y为正整数,Y的取值由嵌入式系统中的总内存容量决定,并在所述嵌入式系统启动之前预先设置好。0070 为方便描述,本实施方式中选取P6,即基本内存块长度为2664B,那么,第0说 明 书CN 103077126 A10。