专利名称:机顶盒内存管理方法及装置的制作方法
技术领域:
本发明涉及计算机软件领域,更具体地说,涉及一种机顶盒内存管理方法及装置。
背景技术:
随着信息处理技术的不断发展和完善,数字机顶盒系统内存的应用越来越复杂也越来越重要。机顶盒运行时需要处理无限临时信息,机顶盒软件可以使用的内存有限,因此机顶盒运行时需要通过动态分配释放内存的方法共享有限内存满足临时存储无限临时信息需要。实时多任务多函数动态分配释放内存,在机顶盒接收处理某些实时信号时触发的内存泄漏,很难在短时间内通过软件黑盒测试发现。对于内存泄露,是指应用程序在运行过程中,利用一些特定的函数中分配的,在使用完毕后再通过特定函数予以释放的内容。如果应用程序在使用完后内存没有将其释放,则这块内存就不能被再次利用,就认为这块内存泄露了。内存泄露时,将会导致内存空间的浪费,一个小的内存泄露可能不需要太注意,但是若程序泄露大块内存,或者渐增式的泄露内存会引起下述现象先是系统性能降低,然后引起复杂的内存耗尽错误,最坏的情况是一个内存泄露可能用完了非常多的内存而引起其他程序的出错,而用户不能知道错误到底来自哪里。另外,一个看上去危害不大的内存泄露,可能是另外一个问题的先兆。因此,要尽量避免内存泄露现象的发生。机顶盒软件有几十万行代码,由机顶盒主芯片提供商开发的驱动软件、第三方特定功能提供商开发的特定功能软件和机顶盒开发商开发的基本应用软件构成,机顶盒开发商可能没有全部源程序或代码很复杂,不可能或不能够通过检查源代码发现。
发明内容
本发明要解决的技术问题在于,针对现有技术中机顶盒内存泄漏难以在短时间内通过软件黑盒测试发现的缺陷,提供一种机顶盒内存管理方法和装置。本发明解决其技术问题所采用的技术方案是构造一种机顶盒内存管理方法,包括a、通过内存记录表模块建立用于记录机顶盒内存分配情况的内存记录表;b、当机顶盒进行内存分配时,内存分配模块往所述内存记录表中添加与所述内存分配相关联的内存分配记录;C、当机顶盒进行内存释放时,内存释放模块在所述内存记录表中查找与待释放内存相关联的内存分配记录,如果存在关联的内存分配记录则执行内存释放、并删除该内存分配记录;
d、通过内存记录表输出模块确定输出周期,在输出周期内输出内存记录表。在本发明所述的机顶盒内存管理方法中,所述内存记录表是双向链表,内存记录表中包括至少一条记录;所述一条记录对应一个节点,该节点的节点信息包括前一节点的地址、后一节点的地址、记录内容。在本发明所述的机顶盒内存管理方法中,所述记录内容包括被分配内存块地址、被分配内存块大小、分配内存函数被调用的任务、调用文件名、调用行号、内存被分配时刻。在本发明所述的机顶盒内存管理方法中,所述步骤b进一步包括bl、输入内存分配参数,所述分配参数包括需要分配的内存大小、调用文件名、调用行号;b2、为需要分配的内存分配一个内存块地址指针;b3、判断内存块地址指针是否为空指针,如果是,则表示内存分配不成功,执行步骤blO;否则执行步骤b4;b4、分配一个用于记录内存分配信息的节点信息结构指针;b5、判断节点信息结构指针是否为空指针,如果是,则返回内存块地址指针执行步骤b9,否则执行步骤b6; b6、取调用任务标识、系统时间;b7、为节点信息结构指针赋值;b8、将节点信息结构指针添加到内存记录表的尾部;b9、输出内存块地址指针;blO、输出空指针,结束。在本发明所述的机顶盒内存管理方法中,所述步骤c进一步包括Cl、输入待释放的内存块地址指针;c2、判断待释放的内存块地址指针是否是空指针,如果是,则执行步骤c8,否则执行步骤c3 ;c3、释放待释放的内存块地址指针所指的内存块;c4、在内存记录表中查找与待释放内存指针关联的节点信息结构指针;c5、判断节点信息结构指针是否是空指针,如果是,则执行步骤c8,否则执行步骤c6 ;c6、从内存记录表中删除节点信息结构指针对应的记录;c7、释放节点信息结构指针所指的内存块;c8、结束。在本发明所述的机顶盒内存管理方法中,所述输出周期根据机顶盒内存分配频率和机顶盒允许输出调试信息确定。本发明还构造一种机顶盒内存管理装置,包括内存记录表模块用于记录机顶盒内存分配情况,将内存分配和内存释放的信息记录到内存记录表中;内存分配模块与所述内存记录表模块连接,用于对机顶盒进行内存分配,并往内存记录表模块中添加与上述内存分配相关联的内存分配记录;内存释放模块与所述内存记录表模块连接,用于对机顶盒进行内存释放,并在上述内存记录表中查找与待释放内存相关联的内存分配记录,如果存在关联的内存分配记录则执行内存释放、并删除该内存分配记录;内存记录表输出模块用于在输出周期内输出内存记录表。在本发明的机顶盒内存管理装置中,所述内存记录表是双向链表,内存记录表中包括至少一条记录;所述一条记录对应一个节点,该节点的节点信息包括前一节点的地址、后一节点的地址、记录内容。在本发明的机顶盒内存管理装置中,所述记录内容包括被分配内存块地址、被分配内存块大小、分配内存函数被调用的任务、调用文件名、调用行号、内存被分配时刻。在本发明的机顶盒内存管理装置中,所述输出周期根据机顶盒内存分配频率和机顶盒允许输出调试信息确定。实施本发明的机顶盒内存管理方法和装置,具有以下有益效果通过增加内存记录表,在内存分配时添加分配记录到内存记录表中,在内存释放时在内存记录表中删除相应记录,并在输出周期内输出内存记录表,用户可根据该内存记录表分析内存的使用状态,判断是否发生了内存泄露,进而对内存进行管理,重新进行内存分配和释放,可以提高机顶盒内存的管理速度,精确度高,具有很强的可操作性;根据实际需要进行内存分配和内存释放,保证内存的高性能分配又可以避免浪费。
下面将结合附图及实施例对本发明作进一步说明,附图中图I是本发明的机顶盒内存管理方法流程图;图2是本发明的机顶盒内存管理方法中内存分配步骤的具体流程图;图3是本发明的机顶盒内存管理方法中内存释放步骤的具体流程图;图4是本发明的机顶盒内存管理装置的结构框图。
具体实施例方式为了使本发明的目的更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。如图I所示,在本发明的机顶盒内存管理方法流程图中,包括a、通过内存记录表模块建立用于记录机顶盒内存分配情况的内存记录表;b、当机顶盒进行内存分配时,内存分配模块往内存记录表中添加与所述内存分配相关联的内存分配记录;C、当机顶盒进行内存释放时,内存释放模块在内存记录表中查找与待释放内存相关联的内存分配记录,如果存在关联的内存分配记录则执行内存释放、并删除该内存分配记录;d、通过内存记录表输出模块确定输出周期,在输出周期内输出内存记录表。输出周期根据机顶盒内存分配频率和机顶盒允许输出调试信息确定。内存记录表是双向链表,内存记录表中包括至少一条记录;一条记录对应一个节点,该节点的节点信息包括前一节点的地址、后一节点的地址、记录内容。记录内容包括被分配内存块地址、被分配内存块大小、分配内存函数被调用的任务、调用文件名、调用行号、内存被分配时刻等信息构成。记录被分配内存块地址便于释放内存时删除对应记录;记录被分配内存块大小便于计算已分配内存的大小、观察已分配内存大小随时间的变化情况、是否有内存泄漏等;记录分配内存函数被调用的任务、调用文件名、调用行号,便于定位导致内存泄漏问题的代码;记录内存被分配时刻便于分析实际信号与内存泄漏的关系。
用户通过该内存记录表可分析内存的使用状态,判断是否发生内存泄露,具体如下假设机顶盒开始运行时可分配内存大小为S,第i次已分配的内存大小为Si,第i次已分配的内存块数为Ki,第j次已分配的内存大小为Sj,第j次已分配的内存块数为Kj,i取大于零的整数,j取大于i的整数,如果Sj大于Si,随j的增加而不断增大,Kj大于Ki,Kj与Ki的差值随j的增加而不断增大,那么可以分配内存减少,平均减少速度X=(Sj-Si)/(j_i)/t,平均每次导致内存减少的内存块y=( (Sj-Si)/(Kj-Ki),机顶盒运行约S/x时间后可分配内存大小变为零,增加一块未释放内存块的平均时间Z= (j-i)*t/(Kj-Ki)。在具体实现过程中,节点信息的结构可通过C语言实现,如下 Struct
{
pMemlnfo pPreMemlnfo; // 前一个节点的地址
pMemlnfo pNextMemlnfo; // 后一个节点的地址 unsigned int *p;I/被分配内存块地址
unsigned int len;Il被分配内存块大小
unsigned int Inc;Il 调用行号
unsigned int taskid;// 调用任务标识
unsigned int tc;// 调用时刻
char fiic[256];//调用文件名(假设文件名最长为254字节)
} Memlnfo,*pMemInfo;// 节点信息。在具体实现过程中,对机顶盒软件的相关函数定义如下void *dFuniVI(int Size,char *filename,int line); // 内 .分fill I求I 数 void dFunF(void *pMem) ;// 内存释放函数
void *FunM(int Size);//原内存分配函数
void FunF(void *pMem);Il 原内存释放函数
void *pMr;//定义内存块地址指针
pMemlnfo pMj;II定义节点信息结构指针 #define Lj Sizeof(MemInfo)Il定义节点信息结构大小机顶盒软件用C语言实现;根据本方法用C语言实现了函数dFunM、dFunF和内存记录表输出,利用下列宏,不修改机顶盒软件调用内存分配函数和内存释放函数 的代码,就可以使用本方法管理内存。使用宏如下#define FunM(x) dFunM(x, _FILE_, _LINE_)#def ine FunF (x) dFunF (x)如图2所示,在本发明的机顶盒内存管理方法中步骤b的具体流程图中,调用内存分配函数分配内存,具体如下bl、输入内存分配参数,分配参数包括需要分配的内存大小Lr、调用文件名Fnc、调用行号Lnc ;b2、为需要分配的内存分配一个大小为Lr的内存块地址指针pMr;b3、判断内存块地址指针pMr是否为空指针,如果是,则表示内存分配不成功,执行步骤blO;否则执行步骤b4;b4、分配一个用于记录内存分配信息的节点信息结构指针pMj ;b5、判断节点信息结构指针pMj是否为空指针,如果是,则返回内存块地址指针PMr执行步骤b9,否则执行步骤b6 ;b6、取调用任务标识、系统时间;b7、为节点信息结构指针pMj的赋值;b8、将节点信息结构指针pMj添加到内存记录表的尾部;b9、输出内存块地址指针pMr ;blO、输出空指针,结束。如图3所示,在本发明的机顶盒内存管理方法中步骤c的具体流程图中,调用内存释放函数释放内存,具体如下Cl、输入待释放的内存块地址指针pMr ;c2、判断待释放的内存块地址指针pMr是否是空指针,如果是,则执行步骤c8,否则执行步骤c3 ;c3、释放待释放的内存块地址指针pMr所指的内存块;c4、在内存记录表中查找与待释放内存块地址指针pMr对应的节点信息结构指针pMj ;c5、判断节点信息结构指针pMj是否是空指针,如果是,则执行步骤b8,否则执行步骤c6 ;c6、从内存记录表中删除节点信息结构指针pMj对应的记录;c7、释放节点信息结构指针pMj所指的内存块;
c8、结束。如图4所示,在本发明机顶盒内存管理装置的结构框图中,包括内存记录表模块41 :用于记录机顶盒内存分配情况,将内存分配和内存释放的信息记录到内存记录表中;内存分配模块42 :与内存记录表模块41连接,用于对机顶盒进行内存分配,并往内存记录表模块中添加与上述内存分配相关联的内存分配记录;内存释放模块43 :与内存记录表模块41连接,用于对机顶盒进行内存释放,并在上述内存记录表中查找与待释放内存相关联的内存分配记录,如果存在关联的内存分配记录则执行内存释放、并删除该内存分配记录;内存记录表输出模块44 :与内存记录表模块41连接,用于在输出周期内输出内存记录表。内存记录表模块41中的内存记录表是双向链表,内存记录表中包括至少一条记录;一条记录对应一个节点,该节点的节点信息包括前一节点的地址、后一节点的地址、记录内容。记录内容包括被分配内存块地址、被分配内存块大小、分配内存函数被调用的任务、调用文件名、调用行号、内存被分配时刻。内存分配模块42动态分配内存,每进行一次分配,都增加一条记录发送给内存记录表模块41,由内存记录表模块42保存记录。每次释放内存时,用要释放的内存块地址作关键词查找内存记录表对应的记录,并删除该记录。内存记录表输出44创建内存记录表输出任务,在输出周期内通过串口等输出内存记录表信息如已分配的内存大小、已分配的内存块数、已分配的内存块的记录信息。输出周期根据实际情况如动态内存分配的频率、机顶盒允许输出多少调试信息等确定,一般输出周期为60秒。以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种机顶盒内存管理方法,其特征在于,包括 a、通过内存记录表模块(41)建立用于记录机顶盒内存分配情况的内存记录表; b、当机顶盒进行内存分配时,内存分配模块(42)往所述内存记录表中添加与所述内存分配相关联的内存分配记录; c、当机顶盒进行内存释放时,内存释放模块(43)在所述内存记录表中查找与待释放内存相关联的内存分配记录,如果存在关联的内存分配记录则执行内存释放、并删除该内存分配记录; d、通过内存记录表输出模块(44)确定输出周期,在输出周期内输出内存记录表。
2.根据权利要求I所述的机顶盒内存管理方法,其特征在于,所述内存记录表是双向链表,内存记录表中包括至少一条记录;所述一条记录对应一个节点,该节点的节点信息包括前一节点的地址、后一节点的地址、记录内容。
3.根据权利要求2所述的机顶盒内存管理方法,其特征在于,所述记录内容包括被分配内存块地址、被分配内存块大小、分配内存函数被调用的任务、调用文件名、调用行号、内存被分配时刻。
4.根据权利要求3所述的机顶盒内存管理方法,其特征在于,所述步骤b进一步包括 bl、输入内存分配参数,所述分配参数包括需要分配的内存大小、调用文件名、调用行号; b2、为需要分配的内存分配一个内存块地址指针; b3、判断内存块地址指针是否为空指针,如果是,则表示内存分配不成功,执行步骤blO ;否则执行步骤b4 ; b4、分配一个用于记录内存分配信息的节点信息结构指针; b5、判断节点信息结构指针是否为空指针,如果是,则返回内存块地址指针执行步骤b9,否则执行步骤b6 ; b6、取调用任务标识、系统时间; b7、为节点信息结构指针赋值; b8、将节点信息结构指针添加到内存记录表的尾部; b9、输出内存块地址指针; blO、输出空指针,结束。
5.根据权利要求3所述的机顶盒内存管理方法,其特征在于,所述步骤c进一步包括 cl、输入待释放的内存块地址指针; c2、判断待释放的内存块地址指针是否是空指针,如果是,则执行步骤c8,否则执行步骤c3 ; c3、释放待释放的内存块地址指针所指的内存块; c4、在内存记录表中查找与待释放内存块地址指针对应的节点信息结构指针; c5、判断节点信息结构指针是否是空指针,如果是,则执行步骤c8,否则执行步骤c6 ; c6、从内存记录表中删除节点信息结构指针对应的记录; c7、释放节点信息结构指针所指的内存块;c8、结束。
6.根据权利要求I所述的机顶盒内存管理方法,其特征在于,所述输出周期根据机顶盒内存分配频率和机顶盒允许输出调试信息确定。
7.一种机顶盒内存管理装置,其特征在于,包括 内存记录表模块(41):用于记录机顶盒内存分配情况,将内存分配和内存释放的信息记录到内存记录表中; 内存分配模块(42):与所述内存记录表模块(41)连接,用于对机顶盒进行内存分配,并往内存记录表模块(41)中添加与上述内存分配相关联的内存分配记录; 内存释放模块(43 ):与所述内存记录表模块(41)连接,用于对机顶盒进行内存释放,并在上述内存记录表中查找与待释放内存相关联的内存分配记录,如果存在关联的内存分配记录则执行内存释放、并删除该内存分配记录; 内存记录表输出模块(44):与所述内存记录表模块(41)连接,用于在输出周期内输出内存记录表。
8.根据权利要求7所述的机顶盒内存管理装置,其特征在于,所述内存记录表是双向链表,内存记录表中包括至少一条记录;所述一条记录对应一个节点,该节点的节点信息包括前一节点的地址、后一节点的地址、记录内容。
9.根据权利要求8所述的机顶盒内存管理装置,其特征在于,所述记录内容包括被分配内存块地址、被分配内存块大小、分配内存函数被调用的任务、调用文件名、调用行号、内存被分配时刻。
10.根据权利要求7所述的机顶盒内存管理装置,其特征在于,所述输出周期根据机顶盒内存分配频率和机顶盒允许输出调试信息确定。
全文摘要
本发明涉及机顶盒内存管理方法,包括以下步骤a、通过内存记录表模块建立用于记录机顶盒内存分配情况的内存记录表;b、当机顶盒进行内存分配时,内存分配模块往内存记录表中添加与内存分配相关联的内存分配记录;c、当机顶盒进行内存释放时,内存释放模块在内存记录表中查找与待释放内存相关联的内存分配记录,如果存在关联的内存分配记录则执行内存释放、并删除该内存分配记录;d、通过内存记录表输出模块确定输出周期,在输出周期内输出内存记录表。本发明还涉及机顶盒内存管理装置。使用本发明可以提高机顶盒内存的管理速度,精确度高,具有很强的可操作性;保证内存的高性能分配又可以避免浪费。
文档编号H04N21/45GK102685590SQ20121014842
公开日2012年9月19日 申请日期2012年5月14日 优先权日2012年5月14日
发明者陈恒 申请人:深圳市九洲电器有限公司