宽带载波内存管理算法制造技术

技术编号:15638984 阅读:146 留言:0更新日期:2017-06-15 20:40
本发明专利技术公开了宽带载波内存管理算法,涉及内存管理技术领域,该算法不易于产生碎片,并能快速检测内存使用状态。先将整块内存分成两部分内存,在程序申请到内存使用后,还需要对该程序所占用的内存地址进行编号,并设定该程序占用该内存地址的最大时间;在程序占用内存地址的最大时间以内释放该程序占用的内存地址;根据程序占用内存地址的最大时间查看该程序占用内存的状态,如果程序占用内存地址的时间超过该程序占用内存地址的最大时间,说明此内存地址上的内存没有释放,则需要检测此内存是否忘记释放,如果检测到此内存是忘记释放则进行自动释放,如果检测到此内存并没有忘记释放则等待内存释放。

【技术实现步骤摘要】
宽带载波内存管理算法
本专利技术涉及内存管理
,具体涉及宽带载波内存管理算法。
技术介绍
宽带载波模块要管理最大2040个从节点。而且还有各种抄表任务,都需动态审请内存。在嵌入式系统中,内存一般都比较小,内存资源十分紧张。嵌入式软件开发者在开发程序时总是要斤斤计较,以尽可能节省的方式使用内存,避免内存的浪费,从而在这方面花费了过多的精力。现有内存管理易产生内存碎片,碎片较多时,会耗尽内存,如果碎片累计到极端的情况下可能导致没有内存可用,最终导致程序瘫痪,系统崩溃的灾难后果。
技术实现思路
本专利技术是为了解决现有内存易于产生碎片的不足,提供一种不易于产生碎片,内存使用状态的检测区域小,并能快速检测内存使用状态的宽带载波内存管理算法。为了实现上述目的,本专利技术采用以下技术方案:宽带载波内存管理算法,内存管理算法包括内存初始化、内存申请、内存释放和内存状态查看;步骤(1)内存初始化先将整块内存分成两部分内存,设这两部分内存分别为内存区A和内存区B,并且内存区A的内存容量小于内存区B的内存容量;步骤(2)内存申请步骤(1-2-1)在程序申请使用内存时,先查看内存区A中是否有内存可用,再查看程序要申请的内存容量;步骤(1-2-2)如果内存区A中没有内存可用,则将内存区A中正在运行的一个程序的一段程序段转移到内存区B中去使用内存,然后跳转到步骤(1-2-5),步骤(1-2-4)如果内存区A中有内存可用,步骤(1-2-5)则判断内存区A中可用的内存容量是否大于或等于程序要申请的内存容量;如果内存区A中可用的内存容量大于或等于程序要申请的内存容量,则程序直接向内存区A申请使用内存;如果内存区A中可用的内存容量小于程序要申请的内存容量,则程序先将内存区A中可用的内存申请用完,再将程序要申请的内存所剩下的内存向内存区B申请内存使用;在程序申请到内存使用后,还需要对该程序所占用的内存地址进行编号,并设定该程序占用该内存地址的最大时间;步骤(3)内存释放在程序占用内存地址的最大时间以内释放该程序占用的内存地址;步骤(4)内存状态查看根据程序占用内存地址的最大时间查看该程序占用内存的状态,如果程序占用内存地址的时间超过该程序占用内存地址的最大时间,说明此内存地址上的内存没有释放,则需要检测此内存是否忘记释放,如果检测到此内存是忘记释放则进行自动释放,如果检测到此内存并没有忘记释放则等待此内存释放。本方案的内存管理算法是让每个要在内存中运行的程序都有一段程序段在内存区A内运行,只要检测内存区A内的内存使用状态就能够知道整块内存的使用状态,实现不易于产生碎片,内存使用状态的检测区域小,能快速检测内存使用状态的目的。本方案的内存管理算法简单易用,简洁高效,并且不会产生内存碎片,而且还能快速检测内存使用状态,为嵌入式系统开发人员快速检测内存使用状态提供了极大的方便。内存使用状态的检测区域小,只要检测内存区A中是否有程序在使用即能快速知道整个内存的使用状态。本方案中,若干个程序在使用内存时,让每个程序的一部分程序段或者全部程序段都要使用内存区A中的内存;在任意一个程序要退出内存使用时,让要退出的这个程序位于内存区A中的这部分程序段或者全部程序段都跟着全部退出,所以我们只要检测内存区A中是否有程序在使用即能快速知道整个内存的使用状态。作为优选,步骤(2-1)设内存区A的容量大小为H,设内存区B的容量大小为U;若设内存区A的容量大小是一个由N个存储块组成的二维数组,设内存区B的容量大小也是一个由M个存储块组成二维数组,若每个存储块的最小存储容量就是该存储块的最小内存单位C,则内存区A的容量大小H=N×C,内存区B的容量大小U=M×C;设程序要申请的内存容量大小为J,并设程序在申请内存使用时,在内存区A中还有可用的内存容量大小为K,并且0≤K≤H,0≤J≤H+U;步骤(2-2)程序在申请使用内存时,先查看内存区A中可用内存容量大小K,再查看程序要申请的内存容量大小J;步骤(2-3)当K=0时,步骤(2-4)则先将内存区A中正在运行的一个程序的一段程序段转移到内存区B中去使用内存,从而让内存区A中有可用的内存容量,并且此时内存区A中可用的内存容量K>0,然后跳转到步骤(2-6),步骤(2-5)当K>0时,步骤(2-6)如果程序要申请的内存容量大小J≤内存区A中可用的内存容量大小K时,则程序直接向内存区A申请使用内存;如果程序要申请的内存容量大小J>内存区A中可用的容量大小K时,则程序先向内存区A申请使用内存,并将内存区A中可用的容量大小K全部申请用完,然后程序再向内存区B申请使用内存,并且此时程序要向内存区B申请使用的内存容量大小为J-K。作为优选,定义一个二维数组作为内存管理区,并用该二维数组的一行表示一个内存容量大小的最小存储单元,则该内存管理区的内存容量大小就等于该二维数组的行数个最小存储单元,二维数组每行的内存容量大小等于该二维数组的列数大小,以二维数组的每一行作为一个最小的申请单元,行数和列数根据程序的需要进行调整;定义的二维数组包括定义二维数组的行数、定义二维数组的列数和定义静态的二维数组;再定义静态的一维数组,并且一维数组的元素个数与二维数组的行数一一对应;用该一维数组的元素来记录所述二维数组的行数申请情况的行位置编号标记;在内存申请时,是从二维数组中申请一定的行数,然后将相应的行数进行位置编号标记;具体是从已经定义的二维数组中申请一定的内存容量,然后返回申请到的内存容量在二维数组中的行位置,同时将该行位置编号标记在二维数组中相应位置处做好记录,并在一维数组中将相应的行位置记录处进行位置编号标记;在内存释放时,是将一维数组中相应的行位置记录处的行位置编号标记清零即可实现行位置对应的内存释放;在内存状态查看时,因为程序申请内存使用时是按行位置编号标记的,所以每次程序审请内存使用时都清楚它的编号;由于程序占用内存地址的最大时间在编写程序时已经设定,如果程序占用内存的时间超过该程序规定的最大占用时间,则判断该程序长时间没有释放,内存会自己检测该程序占用的内存是否忘记释放,然后进行内存自动释放;通过实时查看和不断的监测行位置编号标记,即可知道程序中是否有申请过内存而长时间没有进行释放的情况;通过统计每次内存申请时从二维数组中申请的行数和最大一次申请行数,就能获得内存的使用情况。作为优选,分别设置内存初始化的统一对外接口函数、内存申请的统一对外接口函数、内存释放的统一对外接口函数和内存状态查看的统一对外接口函数;程序只需使用这四个统一对外接口函数即可进行内存初始化、内存申请、内存释放和内存状态查看。作为优选,设任意程序所占用的内存地址编号为Li,其中i=0,1,2,3,-----;还设任意程序所占用的内存地址Li的最大时间为T;在步骤(4)中,如果检测到此内存并没有忘记释放则等待内存释放,则在使用该内存地址的程序设定的占用该内存地址的最大时间T的2倍时间时强制释放该内存地址。作为优选,所述内存区A由若干个扇区组成,如果前一个程序已经将内存区A中可用的内存申请用完,并且前一个程序占据了内存区A中的至少两个扇区,当有后一个程序要向内存区A申请内存使用时,则先将前一个程序位于内存区A内一个扇区中使用的内存内的这段程序转移到内存区B中去使用本文档来自技高网...
宽带载波内存管理算法

【技术保护点】
宽带载波内存管理算法,其特征在于,内存管理算法包括内存初始化、内存申请、内存释放和内存状态查看;(1)内存初始化先将整块内存分成两部分内存,设这两部分内存分别为内存区A和内存区B,并且内存区A的内存容量小于内存区B的内存容量;(2)内存申请(1‑2‑1)在程序申请使用内存时,先查看内存区A中是否有内存可用,再查看程序要申请的内存容量;(1‑2‑2)如果内存区A中没有内存可用,则将内存区A中正在运行的一个程序的一段程序段转移到内存区B中去使用内存,然后跳转到步骤(1‑2‑5),(1‑2‑4)如果内存区A中有内存可用,(1‑2‑5)则判断内存区A中可用的内存容量是否大于或等于程序要申请的内存容量;如果内存区A中可用的内存容量大于或等于程序要申请的内存容量,则程序直接向内存区A申请使用内存;如果内存区A中可用的内存容量小于程序要申请的内存容量,则程序先将内存区A中可用的内存申请用完,再将程序要申请的内存所剩下的内存向内存区B申请内存使用;在程序申请到内存使用后,还需要对该程序所占用的内存地址进行编号,并设定该程序占用该内存地址的最大时间;(3)内存释放在程序占用内存地址的最大时间以内释放该程序占用的内存地址;(4)内存状态查看根据程序占用内存地址的最大时间查看该程序占用内存的状态,如果程序占用内存地址的时间超过该程序占用内存地址的最大时间,说明此内存地址上的内存没有释放,则需要检测此内存是否忘记释放,如果检测到此内存是忘记释放则进行自动释放,如果检测到此内存并没有忘记释放则等待此内存释放。...

【技术特征摘要】
1.宽带载波内存管理算法,其特征在于,内存管理算法包括内存初始化、内存申请、内存释放和内存状态查看;(1)内存初始化先将整块内存分成两部分内存,设这两部分内存分别为内存区A和内存区B,并且内存区A的内存容量小于内存区B的内存容量;(2)内存申请(1-2-1)在程序申请使用内存时,先查看内存区A中是否有内存可用,再查看程序要申请的内存容量;(1-2-2)如果内存区A中没有内存可用,则将内存区A中正在运行的一个程序的一段程序段转移到内存区B中去使用内存,然后跳转到步骤(1-2-5),(1-2-4)如果内存区A中有内存可用,(1-2-5)则判断内存区A中可用的内存容量是否大于或等于程序要申请的内存容量;如果内存区A中可用的内存容量大于或等于程序要申请的内存容量,则程序直接向内存区A申请使用内存;如果内存区A中可用的内存容量小于程序要申请的内存容量,则程序先将内存区A中可用的内存申请用完,再将程序要申请的内存所剩下的内存向内存区B申请内存使用;在程序申请到内存使用后,还需要对该程序所占用的内存地址进行编号,并设定该程序占用该内存地址的最大时间;(3)内存释放在程序占用内存地址的最大时间以内释放该程序占用的内存地址;(4)内存状态查看根据程序占用内存地址的最大时间查看该程序占用内存的状态,如果程序占用内存地址的时间超过该程序占用内存地址的最大时间,说明此内存地址上的内存没有释放,则需要检测此内存是否忘记释放,如果检测到此内存是忘记释放则进行自动释放,如果检测到此内存并没有忘记释放则等待此内存释放。2.根据权利要求1所述的宽带载波内存管理算法,其特征在于,(2-1)设内存区A的容量大小为H,设内存区B的容量大小为U;若设内存区A的容量大小是一个由N个存储块组成的二维数组,设内存区B的容量大小也是一个由M个存储块组成二维数组,若每个存储块的最小存储容量就是该存储块的最小内存单位C,则内存区A的容量大小H=N×C,内存区B的容量大小U=M×C;设程序要申请的内存容量大小为J,并设程序在申请内存使用时,在内存区A中还有可用的内存容量大小为K,并且0≤K≤H,0≤J≤H+U;(2-2)程序在申请使用内存时,先查看内存区A中可用内存容量大小K,再查看程序要申请的内存容量大小J;(2-3)当K=0时,(2-4)则先将内存区A中正在运行的一个程序的一段程序段转移到内存区B中去使用内存,从而让内存区A中有可用的内存容量,并且此时内存区A中可用的内存容量K>0,然后跳转到步骤(2-6),(2-5)当K>0时,(2-6)如果程序要申请的内存容量大小J≤内存区A中可用的内存容量大小K时,则程序直接向内存区A申请使用内存;如果程序要申请的内存容量大小J>内存区A中可用的容量大小K时,则程序先向内存区A申请使用内存,并将内存区A中可用的容量大小K全部申请用完,然后程序再向内存区B申请使用内存,并且此时程序要向内存区B申请使用的内存容量大小为J-K。3.根据权利要求1所述的宽带载波内存管理算法,其特征在于,定义一个二维数组作为内存管理区,并用该二维数组的一行表示一个内存容量大小的最小存储单元,则该内存管理区的内存容量大小就等于该二维数组的行数个最小存储单元,二维数组每行的内存容量大小等于该二维数组的列数大小,以二维数组的每一行作为一个最小的申请单元,行数和列数根据程序的需要进行调整;定义的二维数组包括定义二维数组的行数、定义二维数组的列数和定义静态的二维数组;再定义静态的一维数组,并且一维数组的元素个数与二维数组的行数一一对应;用该一维数组的元素来记录所述二维数组的行数申请情况的行位置编号标记;在内存申请时,是从二维数组中申请一定的行数,然后将相应的行数进行位置编号标记;具体是从已经定义的二维数组中申请一定的内存容量,然后返回申请到的内存容量在二维数组中的行位置...

【专利技术属性】
技术研发人员:常洪山
申请(专利权)人:昊宏广泰北京科技有限公司
类型:发明
国别省市:北京,11

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

1