一种嵌入式系统中内存泄漏诊断处理的方法和装置的制造方法

文档序号:9921931阅读:650来源:国知局
一种嵌入式系统中内存泄漏诊断处理的方法和装置的制造方法
【技术领域】
[0001]本发明属于计算机技术应用领域,具体涉及一种嵌入式系统中内存泄漏诊断处理的方法和装置。
【背景技术】
[0002]嵌入式系统是一种资源比较受限的系统,因此如何高效复用有限的系统资源,特别是如何利用好有限的内存资源,发挥最大运行效率,成为嵌入式系统性能的关键问题。
[0003]嵌入式系统中,大多数方案采用动态内存管理方式,而所谓的动态内存也就是及时申请内存,用完及时释放内存,而在这个过程中经常出现程序bug或者人员疏忽,导致内存无法释放,出现内存泄漏问题,随着系统长时间运行,内存越用越少,最后无内存可用,程序最终会因为没有足够内存空间而无法正常运行,导致系统奔溃死机,后果非常严重。因此,如何自动有效地准确检测内存泄漏并合理释放内存是一个亟待解决的棘手难题。
[0004]以往,传统的内存泄漏检测及处理方法,一是在调试或者测试阶段,使用自动测试软件通过对内存进行插粧,内存使用情况被记录到自动测试软件的数据库中,事后人为分析判断是否存在内存泄漏,并通过人工检查方式对内存泄漏位置进行定位;二是判断应用程序所占用的内存时间是否超过预先设定的内存生命周期,当超过生命周期时,判断为发生内存泄漏,并简单粗暴地强制释放内存。参考专利文献CN101414272B公开了一种内存泄漏的检测方法和装置,通过被检测内存的当前被占用时间是否超过预先为被检测内存设置的生命周期,以及被检测内存是否正在被申请被检测内存的业务进程所使用,判断被测内存是否发生泄漏。
[0005]传统的内存泄漏检测及处理方法过于简单,比较机械,实时性不够,处理方法不够灵活恰当,在实际应用中效果差强人意。且存在很多缺点:一是采用插粧方式,只能在调试或者测试阶段进行,无法在系统正式部署运行期间进行内存泄漏检测,实时性不够;二是采用插粧方式,需要人为分析判断是否有内存泄漏,并人为检查定位内存泄漏位置,大量内存申请和释放过程,导致排查工作量大,难度高,效率低;三是通过内存的生命周期简单判断为内存泄漏,存在误判情况;四是简单粗暴地强制释放内存,可能导致关键功能失效异常,影响用户正常使用。

【发明内容】

[0006]针对传统的内存泄漏检测处理方法存在的不足之处,本发明提出了一种嵌入式系统中内存泄漏诊断处理的方法和装置。通过内存管理模块与应用程序的动态协调,自动有效地准确诊断内存泄漏情况,灵活合理地分配和释放内存,避免简单粗暴地强制释放内存,导致正在运行的功能失效异常。本发明实现简单,检测准确,处理方法动态灵活,具有实时性高,实用性强,准确可靠,动态灵活,具有良好的应用价值和经济效益。
[0007]本发明采用如下技术方案:
[0008]—种嵌入式系统中内存泄漏诊断处理的方法,该方法包括以下步骤,
[0009]SI,将内存划分成大小不同的内存块,每个内存块等分成多个子内存,内存块i的子内存大小定义为Si,i = l,2,3,…,M,且SKSKXSm,将应用程序申请在用的子内存管理串接起来构成申请链表;
[0010]S2,根据应用程序申请内存的大小S,申请一个大于等于S的子内存Si,并将该子内存节点添加到申请链表中;
[0011]S3,应用程序用完内存后,释放该子内存,删除申请表链中的该子内存节点;
[0012]S4,以固定周期扫描申请链表上的所有子内存节点,当一个子内存占用时间超过内存生命周期时,通知应用程序进行处理。
[0013]进一步的,步骤S2中应用程序初步申请内存的步骤包括,
[0014]S210,从子内存最小的内存块i = I开始检索,依次从小到大检索内存块;
[0015]S211,判断内存块中剩余内存个数Pi是否大于零,若是则跳转到步骤S212,若否则1 = 1+1,判断1是否大于1如果1大于1申请内存失败,如果1不大于1,则转到步骤3211;
[0016]S212,判断应用申请内存的大小S是否小于等于子内存大小Si,若是则申请内存成功,若否则i = i + l,判断i是否大于M,如果i大于M,申请内存失败,如果i不大于M,则转到步骤S211。
[0017]更进一步的,步骤S211或步骤S212中的申请内存失败进入深度申请内存步骤,
[0018]S220,检索申请链表中的所有子内存节点,将子内存大小Si大于申请内存大小S且子内存占用优先级小于申请内存优先级的子内存节点检索出来,检索成功转到步骤S221,检索失败则申请内存失败;
[0019]S221,将检索结果中优先级最低且内存最小的子内存定义为备用子内存;
[0020]S222,释放备用子内存给当前申请的应用程序使用,申请内存成功。
[0021]更进一步的,步骤S221中,如果检索结果中优先级最低且内存最小的子内存大于一个,则将占用时间长度最长的子内存定义为备用子内存。
[0022]进一步的,步骤S4中通知应用程序进行处理包括延长内存生命周期,或者更改内存占用优先级,或者直接释放内存,或者应用程序内存泄漏自动释放内存。
[0023]一种嵌入式系统中内存泄漏诊断处理的装置,它包括,
[0024]内存分配管理单元,用于将内存划分成大小不同的内存块,每个内存块等分成多个子内存,内存块i的子内存大小定义为Si,i = I,2,3,…,M,且SKS2OXSm,将应用程序申请在用的子内存管理串接起来构成申请链表;
[0025]内存申请单元,用于根据应用程序申请内存的大小S,申请一个大于等于S的子内存Si,并将该子内存节点添加到申请链表中;
[0026]内存释放单元,用于应用程序用完内存后,释放该子内存,删除申请表链中的该子内存节点;
[0027 ]内存诊断单元,用于以固定周期扫描申请链表上的所有子内存节点,当一个子内存占用时间超过内存生命周期时,通知应用程序进行处理。
[0028]进一步的,内存申请单元包括初步申请内存单元和深度申请内存单元。
[0029]更进一步的,初步申请内存单元用于从内存块中剩余未使用子内存中申请一个大于等于S的子内存。
[0030]更进一步的,深度申请内存单元,在初步申请单元中申请失败后,从申请链表中将子内存大小S1大于申请内存大小S且子内存占用优先级小于申请内存优先级的子内存节点检索出来后,查找优先级最低且内存最小的子内存,将该子内存释放给当前申请的应用程序使用。
[0031]更进一步的,优先级最低且内存最小的子内存大于一个,则将其中占用时间长度最长的子内存释放给当前申请的应用程序使用。
[0032]更进一步的,通知应用程序进行处理包括延长内存生命周期,或者更改内存占用优先级,或者直接释放内存,或者应用程序内存泄漏自动释放内存。
[0033]本发明具有如下有益效果:一是能够在系统运行过程中自动检测内存泄漏情况,不影响系统正常运行,实时性高,实用性强;二是能够自动有效地定位内存泄漏点,大大降低内存泄漏排查难度,准确可靠,维护效率高;三是通过内存管理模块与应用程序的动态协商,确认内存泄漏情况,检测准确度高;四是通过内存管理模块与应用程序的动态协商,确认内存释放方式,避免强制释放内存导致应用功能失效异常;五是在内存不足时,根据内存应用等级,强制释放一些优先级比较低的内存,确保高优先级应用功能得到正常运行。
【附图说明】
[0034]图1是内存块的结构图;
[0035]图2是初步申请内存的流程图;
[0036]图3是深度申请内存的流程图;
[0037]图4是车辆综合信息服务系统图。
【具体实施方式】
[0038]为进一步说明各实施例,本发明提供有附图。这些附图为本发明揭露内容的一部分,其主要用以说明实施例,并可配合说明书
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1