CN105094710A - 基于哈希表的单进程动态存储管理方法 - Google Patents

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

Info

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
Application number
CN201510558218.3A
Other languages
English (en)
Other versions
CN105094710B (zh
Inventor
李友军
戴欣欣
滕春涛
张成彬
罗华煜
张吉
赵峰荣
胡国
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nari Technology Co Ltd
NARI Nanjing Control System Co Ltd
Original Assignee
Nari Technology Co Ltd
NARI Nanjing Control System Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Nari Technology Co Ltd, NARI Nanjing Control System Co Ltd filed Critical Nari Technology Co Ltd
Priority to CN201510558218.3A priority Critical patent/CN105094710B/zh
Publication of CN105094710A publication Critical patent/CN105094710A/zh
Application granted granted Critical
Publication of CN105094710B publication Critical patent/CN105094710B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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),当应用进程通过动态内存释放接口释放动态内存时,如找不到需释放的动态内存,则给出警示信息,提示程序指针可能异常,并通过消息队列将该异常传递给框架程序,由框架程序保存并提供查询接口。
CN201510558218.3A 2015-09-06 2015-09-06 基于哈希表的单进程动态存储管理方法 Active CN105094710B (zh)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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 华为技术有限公司 一种调控虚拟机物理内存的方法和装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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