基于哈希表的单进程动态存储管理方法技术

技术编号:12384327 阅读:91 留言:0更新日期:2015-11-25 15:39
本发明专利技术公开了一种基于哈希表的单进程动态存储管理方法,包括哈希表初始化、动态内存申请、动态内存释放、实时巡检,创建空的哈希表,保存动态存储申请信息;在动态内存申请中,将申请内存的相关信息存入哈希表,并设立溢出标志;在动态内存释放中,通过查找哈希表,找到相关指针则释放,找不到则给出警示;在实时巡检调用中,通过逐个检查哈希表节点中内存区的溢出标志字,判断动态内存是否溢出,将哈希表中的所有内存空间大小加起来,并按照1小时存储一次的频率存储,判断是否存在内存溢出的风险。本发明专利技术占用进程空闲时间实时监测检查动态内存使用情况,并通过消息队列将监测结果发送给框架,由框架负责整理及提供查询,具有良好的应用前景。

【技术实现步骤摘要】

本专利技术属于嵌入式系统内存动态管理
,具体涉及一种。
技术介绍
现有嵌入式系统的内存管理模块主要负责内存单元的分配、回收和换入换出,其中,“分配”负责在进程向系统申请内存单元时,从空闲内存单元列表中挑选出合适的内存单元分配给进程;“回收”负责当进程释放内存单元时,将释放的内存单元重新放入空闲内存单元列表,并做适当的碎片整理;“换出”负责当物理内存不足时,将不紧急的进程数据或代码先存放到外存(磁盘等)上,从而把它们占用的内存单元腾出来给紧急的进程使用,或者交给计算机系统使用;“换入”负责在必要的时候,将已经换出的进程数据或代码写回已经空闲的内存单元中。目前,内存动态管理方面的研究主要解决操作系统底层内存动态分配、释放及碎片整理方面的问题,这些研究都是提高系统内存的管理效率,但是,在应用层程序调试中,程序动态内存溢出时无法实时探知,内存泄露也没有手段实时监控,且无法准确定位内存溢出、泄漏的代码的位置,是当前内存动态管理中需要解决的问题。
技术实现思路
本专利技术所解决的技术问题是克服现有的在应用层程序调试中,程序动态内存溢出时无法实时探知,内存泄露也没有手段实时监控,且无法准确定位内存溢出、泄漏的代码的位置的问题。为了达到上述目的,本专利技术所采用的技术方案是: 一种,其特征在于:用于运行在单个应用进程上,占用应用进程的空闲时间实时监测检查动态内存使用情况,并通过消息队列将监测结果发送给框架程序,由框架程序负责整理及提供查询,具体包括以下步骤, 步骤(I ),在应用进程的初始化阶段,调用哈希表的初始化接口,建立一张空的哈希表,所述哈希表包括最大内存申请块数、每块内存信息,其中每块内存信息包括有效标志、申请内存的起始地址、申请内存大小、申请该内存代码位置,每块内存包括ZONEl区域、Z0NE2区域、Z0NE3区域、Z0NE4区域、Z0NE5区域五个区域; 步骤(2),当应用进程通过动态内存申请接口申请动态内存时,该接口调用mal1c函数申请内存,同时将该片内存初始化,初始化内存的具体过程为, (1)将申请内存的程序位置信息存入ZONEl区域; (2)将用户申请的内存大小存入Z0NE2区域; (3)在Z0NE3区域和Z0NE5区域部分填入标识性字符,标志字符是用于判断用户数据区溢出的标志字; (4)以Z0NE4区域的内存起始地址为哈希表的键值计算存储位置,并将ZONEl区域的起始地址存入哈希表,将该节点置为有效节点; (5)将Z0NE4区域的首地址返回给应用进程; 步骤(3),当应用进程通过动态内存释放接口释放动态内存时,在哈希表中查找,找到申请的动态内存后,调用free函数释放动态内存; 步骤(4),在应用进程的初始化完成后,通过实时巡检接口,在程序运行空闲时,检查动态内存的溢出及内存泄露风险,具体过程为, (1)将按照哈希表的各块内存的顺序,逐一检查每个内存块的用于放置标识性字符的Z0NE3区域、Z0NE5区域;同时,将哈希表中每块内存的大小加起来,每小时存储一次; (2)若发现Z0NE3区域或者Z0NE5区域发生变化,则给出警示信息,显示动态内存区出现溢出及溢出的位置,并提示用户处理; (3)当内存总量计算值达到一定数量,所述数量可通过参数配置,每小时一次检查存储值是否有增加的趋势,若存在增加趋势,则给出警示信息,提示用户处理,并将信息通过消息队列发送给框架程序,由框架程序保存并提供查询接口 ; 步骤(5),框架程序负责接收各个应用进程的内存异常信息,存储内存异常信息,并提供查询功能。前述的,其特征在于:步骤(1),将应用申请的内存划分为5个区,其中,ZONEl区域用于存储内存申请代码的位置;Z0NE2区域用于存储内存申请的大小;Z0NE3区域和Z0NE5区域用于存储标识性字符;Z0NE4区域用于用户区。前述的,其特征在于:步骤(3),当应用进程通过动态内存释放接口释放动态内存时,,如找不到需释放的动态内存,则给出警示信息,提示程序指针可能异常,并通过消息队列将该异常传递给框架程序,由框架程序保存并提供查询接口。前述的,其特征在于:步骤(5),由框架程序统一收集管理单个进程的内存监测信息,并及时提示程序风险,另外,还提供历史监测信息的查询。本专利技术的有益效果是:本专利技术的,包括哈希表初始化、动态内存申请、动态内存释放、实时巡检,创建空的哈希表,保存动态存储申请信息;在动态内存申请中,将申请内存的相关信息存入哈希表,并设立溢出标志;在动态内存释放中,通过查找哈希表,找到相关指针则释放,找不到则给出警示;在实时巡检调用中,通过逐个检查哈希表节点中内存区的溢出标志字,判断动态内存是否溢出,将哈希表中的所有内存空间大小加起来,并按照I小时存储一次的频率存储,判断是否存在内存溢出的风险,占用进程空闲时间实时监测检查动态内存使用情况,并通过消息队列将监测结果发送给框架,由框架负责整理及提供查询,能够解决应用进程动态内存溢出及内存泄露问题的定位,提高嵌入式系统应用程序的调试及测试效率,具有良好的应用前景。【附图说明】图1是本专利技术的的流程图。图2是本专利技术的哈希表的结构示意图。图3是本专利技术的的层次结构图。【具体实施方式】下面将结合说明书附图,对本专利技术作进一步的说明。本专利技术的,用于运行在单个应用进程上,占用应用进程的空闲时间实时监测检查动态内存使用情况,并通过消息队列将监测结果发送给框架程序,由框架程序负责整理及提供查询,如图1所示,具体包括以下步骤, 步骤(I ),在应用进程的初始化阶段,调用哈希表的初始化接口,建立一张空的哈希表,所述哈希表包括最大内存申请块数、每块内存信息,其中每块内存信息包括有效标志、申请内存的起始地址、申请内存大小、申请该内存代码位置,每块内存包括ZONEl区域、Z0NE2区域、Z0NE3区域、Z0NE4区域、Z0NE5区域五个区域,ZONEl区域用于存储内存申请代码的位置;Z0NE2区域用于存储内存申请的大小;Z0NE3区域和Z0NE5区域用于存储标识性字符;Z0NE4区域用于用户区,哈希表的结当前第1页1 2 本文档来自技高网...
<a href="http://www.xjishu.com/zhuanli/55/CN105094710.html" title="基于哈希表的单进程动态存储管理方法原文来自X技术">基于哈希表的单进程动态存储管理方法</a>

【技术保护点】
一种基于哈希表的单进程动态存储管理方法,其特征在于:用于运行在单个应用进程上,占用应用进程的空闲时间实时监测检查动态内存使用情况,并通过消息队列将监测结果发送给框架程序,由框架程序负责整理及提供查询,具体包括以下步骤,步骤(1),在应用进程的初始化阶段,调用哈希表的初始化接口,建立一张空的哈希表,所述哈希表包括最大内存申请块数、每块内存信息,其中每块内存信息包括有效标志、申请内存的起始地址、申请内存大小、申请该内存代码位置,每块内存包括ZONE1区域、ZONE2区域、ZONE3区域、ZONE4区域、ZONE5区域五个区域;步骤(2),当应用进程通过动态内存申请接口申请动态内存时,该接口调用malloc函数申请内存,同时将该片内存初始化,初始化内存的具体过程为,(1)将申请内存的程序位置信息存入ZONE1区域;(2)将用户申请的内存大小存入ZONE2区域;(3)在ZONE3区域和ZONE5区域部分填入标识性字符,标志字符是用于判断用户数据区溢出的标志字;(4)以ZONE4区域的内存起始地址为哈希表的键值计算存储位置,并将ZONE1区域的起始地址存入哈希表,将该节点置为有效节点;(5)将ZONE4区域的首地址返回给应用进程;步骤(3),当应用进程通过动态内存释放接口释放动态内存时,在哈希表中查找,找到申请的动态内存后,调用free函数释放动态内存;步骤(4),在应用进程的初始化完成后,通过实时巡检接口,在程序运行空闲时,检查动态内存的溢出及内存泄露风险,具体过程为,(1)将按照哈希表的各块内存的顺序,逐一检查每个内存块的用于放置标识性字符的ZONE3区域、ZONE5区域;同时,将哈希表中每块内存的大小加起来,毎小时存储一次;(2)若发现ZONE3区域或者ZONE5区域发生变化,则给出警示信息,显示动态内存区出现溢出及溢出的位置,并提示用户处理;(3)当内存总量计算值达到一定数量,所述数量可通过参数配置,每小时一次检查存储值是否有增加的趋势,若存在增加趋势,则给出警示信息,提示用户处理,并将信息通过消息队列发送给框架程序,由框架程序保存并提供查询接口;步骤(5),框架程序负责接收各个应用进程的内存异常信息,存储内存异常信息,并提供查询功能。...

【技术特征摘要】

【专利技术属性】
技术研发人员:李友军戴欣欣滕春涛张成彬罗华煜张吉赵峰荣胡国
申请(专利权)人:国电南瑞科技股份有限公司国电南瑞南京控制系统有限公司
类型:发明
国别省市:江苏;32

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

1