CN105094710A - 基于哈希表的单进程动态存储管理方法 - Google Patents
基于哈希表的单进程动态存储管理方法 Download PDFInfo
- Publication number
- CN105094710A CN105094710A CN201510558218.3A CN201510558218A CN105094710A CN 105094710 A CN105094710 A CN 105094710A CN 201510558218 A CN201510558218 A CN 201510558218A CN 105094710 A CN105094710 A CN 105094710A
- Authority
- CN
- China
- Prior art keywords
- memory
- region
- hash table
- application
- internal memory
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种基于哈希表的单进程动态存储管理方法,包括哈希表初始化、动态内存申请、动态内存释放、实时巡检,创建空的哈希表,保存动态存储申请信息;在动态内存申请中,将申请内存的相关信息存入哈希表,并设立溢出标志;在动态内存释放中,通过查找哈希表,找到相关指针则释放,找不到则给出警示;在实时巡检调用中,通过逐个检查哈希表节点中内存区的溢出标志字,判断动态内存是否溢出,将哈希表中的所有内存空间大小加起来,并按照1小时存储一次的频率存储,判断是否存在内存溢出的风险。本发明占用进程空闲时间实时监测检查动态内存使用情况,并通过消息队列将监测结果发送给框架,由框架负责整理及提供查询,具有良好的应用前景。
Description
技术领域
本发明属于嵌入式系统内存动态管理技术领域,具体涉及一种基于哈希表的单进程动态存储管理方法。
背景技术
现有嵌入式系统的内存管理模块主要负责内存单元的分配、回收和换入换出,其中,“分配”负责在进程向系统申请内存单元时,从空闲内存单元列表中挑选出合适的内存单元分配给进程;“回收”负责当进程释放内存单元时,将释放的内存单元重新放入空闲内存单元列表,并做适当的碎片整理;“换出”负责当物理内存不足时,将不紧急的进程数据或代码先存放到外存(磁盘等)上,从而把它们占用的内存单元腾出来给紧急的进程使用,或者交给计算机系统使用;“换入”负责在必要的时候,将已经换出的进程数据或代码写回已经空闲的内存单元中。
目前,内存动态管理方面的研究主要解决操作系统底层内存动态分配、释放及碎片整理方面的问题,这些研究都是提高系统内存的管理效率,但是,在应用层程序调试中,程序动态内存溢出时无法实时探知,内存泄露也没有手段实时监控,且无法准确定位内存溢出、泄漏的代码的位置,是当前内存动态管理中需要解决的问题。
发明内容
本发明所解决的技术问题是克服现有的在应用层程序调试中,程序动态内存溢出时无法实时探知,内存泄露也没有手段实时监控,且无法准确定位内存溢出、泄漏的代码的位置的问题。
为了达到上述目的,本发明所采用的技术方案是:
一种基于哈希表的单进程动态存储管理方法,其特征在于:用于运行在单个应用进程上,占用应用进程的空闲时间实时监测检查动态内存使用情况,并通过消息队列将监测结果发送给框架程序,由框架程序负责整理及提供查询,具体包括以下步骤,
步骤(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),框架程序负责接收各个应用进程的内存异常信息,存储内存异常信息,并提供查询功能。
前述的基于哈希表的单进程动态存储管理方法,其特征在于:步骤(1),将应用申请的内存划分为5个区,其中,ZONE1区域用于存储内存申请代码的位置;ZONE2区域用于存储内存申请的大小;ZONE3区域和ZONE5区域用于存储标识性字符;ZONE4区域用于用户区。
前述的基于哈希表的单进程动态存储管理方法,其特征在于:步骤(3),当应用进程通过动态内存释放接口释放动态内存时,,如找不到需释放的动态内存,则给出警示信息,提示程序指针可能异常,并通过消息队列将该异常传递给框架程序,由框架程序保存并提供查询接口。
前述的基于哈希表的单进程动态存储管理方法,其特征在于:步骤(5),由框架程序统一收集管理单个进程的内存监测信息,并及时提示程序风险,另外,还提供历史监测信息的查询。
本发明的有益效果是:本发明的基于哈希表的单进程动态存储管理方法,包括哈希表初始化、动态内存申请、动态内存释放、实时巡检,创建空的哈希表,保存动态存储申请信息;在动态内存申请中,将申请内存的相关信息存入哈希表,并设立溢出标志;在动态内存释放中,通过查找哈希表,找到相关指针则释放,找不到则给出警示;在实时巡检调用中,通过逐个检查哈希表节点中内存区的溢出标志字,判断动态内存是否溢出,将哈希表中的所有内存空间大小加起来,并按照1小时存储一次的频率存储,判断是否存在内存溢出的风险,占用进程空闲时间实时监测检查动态内存使用情况,并通过消息队列将监测结果发送给框架,由框架负责整理及提供查询,能够解决应用进程动态内存溢出及内存泄露问题的定位,提高嵌入式系统应用程序的调试及测试效率,具有良好的应用前景。
附图说明
图1是本发明的基于哈希表的单进程动态存储管理方法的流程图。
图2是本发明的哈希表的结构示意图。
图3是本发明的基于哈希表的单进程动态存储管理方法的层次结构图。
具体实施方式
下面将结合说明书附图,对本发明作进一步的说明。
本发明的基于哈希表的单进程动态存储管理方法,用于运行在单个应用进程上,占用应用进程的空闲时间实时监测检查动态内存使用情况,并通过消息队列将监测结果发送给框架程序,由框架程序负责整理及提供查询,如图1所示,具体包括以下步骤,
步骤(1),在应用进程的初始化阶段,调用哈希表的初始化接口,建立一张空的哈希表,所述哈希表包括最大内存申请块数、每块内存信息,其中每块内存信息包括有效标志、申请内存的起始地址、申请内存大小、申请该内存代码位置,每块内存包括ZONE1区域、ZONE2区域、ZONE3区域、ZONE4区域、ZONE5区域五个区域,ZONE1区域用于存储内存申请代码的位置;ZONE2区域用于存储内存申请的大小;ZONE3区域和ZONE5区域用于存储标识性字符;ZONE4区域用于用户区,哈希表的结构示意图,如图2所示;
步骤(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),框架程序负责接收各个应用进程的内存异常信息,存储内存异常信息,并提供查询功能,由框架程序统一收集管理单个进程的内存监测信息,并及时提示程序风险,另外,还提供历史监测信息的查询。
如图3所示,本发明的基于哈希表的单进程动态存储管理方法的层次结构图,各动态存储管理单元用于运行在应用层的单个应用进程上,占用应用进程的空闲时间实时监测检查动态内存使用情况,收集内存管理信息,并通过消息队列将监测结果发送给框架层的框架程序,由框架程序负责整理及提供查询。
以上显示和描述了本发明的基本原理和主要特征和本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。
Claims (3)
1.一种基于哈希表的单进程动态存储管理方法,其特征在于:用于运行在单个应用进程上,占用应用进程的空闲时间实时监测检查动态内存使用情况,并通过消息队列将监测结果发送给框架程序,由框架程序负责整理及提供查询,具体包括以下步骤,
步骤(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),框架程序负责接收各个应用进程的内存异常信息,存储内存异常信息,并提供查询功能。
2.根据权利要求1所述的基于哈希表的单进程动态存储管理方法,其特征在于:步骤(1),ZONE1区域用于存储内存申请代码的位置;ZONE2区域用于存储内存申请的大小;ZONE3区域和ZONE5区域用于存储标识性字符;ZONE4区域用于用户区。
3.根据权利要求1所述的基于哈希表的单进程动态存储管理方法,其特征在于:步骤(3),当应用进程通过动态内存释放接口释放动态内存时,如找不到需释放的动态内存,则给出警示信息,提示程序指针可能异常,并通过消息队列将该异常传递给框架程序,由框架程序保存并提供查询接口。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510558218.3A CN105094710B (zh) | 2015-09-06 | 2015-09-06 | 基于哈希表的单进程动态存储管理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510558218.3A CN105094710B (zh) | 2015-09-06 | 2015-09-06 | 基于哈希表的单进程动态存储管理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105094710A true CN105094710A (zh) | 2015-11-25 |
CN105094710B CN105094710B (zh) | 2018-04-20 |
Family
ID=54575270
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510558218.3A Active CN105094710B (zh) | 2015-09-06 | 2015-09-06 | 基于哈希表的单进程动态存储管理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105094710B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108363620A (zh) * | 2017-01-27 | 2018-08-03 | 三星电子株式会社 | 提供虚拟内存容量的内存模块及其操作方法 |
CN110795239A (zh) * | 2019-10-15 | 2020-02-14 | 浙江口碑网络技术有限公司 | 应用内存泄露的检测方法及装置 |
CN110837499A (zh) * | 2018-08-16 | 2020-02-25 | 阿里巴巴集团控股有限公司 | 数据访问处理方法、装置、电子设备和存储介质 |
CN111506500A (zh) * | 2020-04-09 | 2020-08-07 | 北京奇艺世纪科技有限公司 | 内存泄露检测方法、装置、电子设备及可读存储介质 |
CN113138874A (zh) * | 2021-03-19 | 2021-07-20 | 中国电子科技集团公司第二十九研究所 | 一种机载电子战嵌入式软件内存溢出检测方法 |
CN113342565A (zh) * | 2021-06-25 | 2021-09-03 | 珠海菲森电力科技有限公司 | 一种防止内存泄漏的方法及系统 |
CN113835920A (zh) * | 2021-09-26 | 2021-12-24 | 歌尔科技有限公司 | 内存异常监测方法、装置及计算机存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080189477A1 (en) * | 2007-02-07 | 2008-08-07 | Hitachi, Ltd. | Storage system and storage management method |
US20130254511A1 (en) * | 2010-10-22 | 2013-09-26 | St-Ericsson Sa | Improving Storage Lifetime Using Data Swapping |
CN103927130A (zh) * | 2014-03-14 | 2014-07-16 | 山东大学 | 基于内存管理单元mmu的统一内外存架构 |
CN104063281A (zh) * | 2013-03-21 | 2014-09-24 | 华为技术有限公司 | 一种调控虚拟机物理内存的方法和装置 |
-
2015
- 2015-09-06 CN CN201510558218.3A patent/CN105094710B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080189477A1 (en) * | 2007-02-07 | 2008-08-07 | Hitachi, Ltd. | Storage system and storage management method |
US20130254511A1 (en) * | 2010-10-22 | 2013-09-26 | St-Ericsson Sa | Improving Storage Lifetime Using Data Swapping |
CN104063281A (zh) * | 2013-03-21 | 2014-09-24 | 华为技术有限公司 | 一种调控虚拟机物理内存的方法和装置 |
CN103927130A (zh) * | 2014-03-14 | 2014-07-16 | 山东大学 | 基于内存管理单元mmu的统一内外存架构 |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108363620A (zh) * | 2017-01-27 | 2018-08-03 | 三星电子株式会社 | 提供虚拟内存容量的内存模块及其操作方法 |
CN108363620B (zh) * | 2017-01-27 | 2023-01-10 | 三星电子株式会社 | 提供虚拟内存容量的内存模块及其操作方法 |
CN110837499A (zh) * | 2018-08-16 | 2020-02-25 | 阿里巴巴集团控股有限公司 | 数据访问处理方法、装置、电子设备和存储介质 |
CN110837499B (zh) * | 2018-08-16 | 2023-08-22 | 阿里巴巴集团控股有限公司 | 数据访问处理方法、装置、电子设备和存储介质 |
CN110795239A (zh) * | 2019-10-15 | 2020-02-14 | 浙江口碑网络技术有限公司 | 应用内存泄露的检测方法及装置 |
CN111506500A (zh) * | 2020-04-09 | 2020-08-07 | 北京奇艺世纪科技有限公司 | 内存泄露检测方法、装置、电子设备及可读存储介质 |
CN111506500B (zh) * | 2020-04-09 | 2023-05-23 | 北京奇艺世纪科技有限公司 | 内存泄露检测方法、装置、电子设备及可读存储介质 |
CN113138874A (zh) * | 2021-03-19 | 2021-07-20 | 中国电子科技集团公司第二十九研究所 | 一种机载电子战嵌入式软件内存溢出检测方法 |
CN113342565A (zh) * | 2021-06-25 | 2021-09-03 | 珠海菲森电力科技有限公司 | 一种防止内存泄漏的方法及系统 |
CN113835920A (zh) * | 2021-09-26 | 2021-12-24 | 歌尔科技有限公司 | 内存异常监测方法、装置及计算机存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN105094710B (zh) | 2018-04-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105094710A (zh) | 基于哈希表的单进程动态存储管理方法 | |
CN102508784B (zh) | 视频监控设备中闪存卡的数据存储方法及其系统 | |
CN101599046B (zh) | 一种内存检测方法及装置 | |
US7475216B2 (en) | Memory tracking with preservation of alignment semantics | |
TW201321980A (zh) | 追蹤一資料處理系統的記憶體使用率之方法 | |
CN107026881B (zh) | 业务数据的处理方法、装置及系统 | |
CN104572460A (zh) | 一种内存泄露的检测方法和装置 | |
CN106775702B (zh) | 基于容器的服务内部接口发现方法 | |
CN102831068A (zh) | 一种内存操作记录的处理方法及装置 | |
CN107783908B (zh) | 一种基于Linux内核内存泄露的检测方法 | |
CN100389403C (zh) | 内存泄漏检测及恢复的方法 | |
CN102467525A (zh) | 单据关联方法及系统 | |
CN110413521A (zh) | 一种堆内存的写越界检测方法和装置 | |
CN107067736B (zh) | 基于时间路网的套牌车分析方法及其系统 | |
CN106020735A (zh) | 一种数据存储方法及数据存储装置 | |
CN103914355A (zh) | 对内存重复释放进行定位的方法和装置 | |
CN100392606C (zh) | 一种定位虚拟操作系统内存泄漏的方法 | |
CN111314174A (zh) | 基于区块链和sdn边缘计算网络系统的网络拨测方法及装置 | |
CN101515242B (zh) | 一种查找改写内存的任务的方法和系统 | |
CN105183542A (zh) | 一种内存管理方法及系统 | |
WO2020000738A1 (zh) | 基于高斯分布的定时任务异常监控方法、电子装置及介质 | |
CN107608885A (zh) | 内存泄漏点的定位方法、装置、系统及可读存储介质 | |
CN103763126A (zh) | 监控数据库的系统、方法及数据库监控装置 | |
CN109816335B (zh) | 电子证照的签发对账方法、系统、存储介质以及设备 | |
CN103399822A (zh) | 用于解决申请图片内存不足的内存分配方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |