一种嵌入式系统中软件所用内存的检测方法

阅读: 评论:0

著录项
  • CN202011500041.9
  • 20201217
  • CN112527663A
  • 20210319
  • 杭州国芯科技股份有限公司
  • 张令;刘建华;刘非;沈建春;黄俊斌
  • G06F11/36
  • G06F11/36

  • 浙江省杭州市文三路90号东部软件园创新大厦A座5-6层
  • 浙江(33)
  • 杭州君度专利代理事务所(特殊普通合伙)
  • 朱亚冠
摘要
本发明公开了一种嵌入式系统中软件所用内存的检测方法。嵌入式软件开发中内存错误问题难以解决。本发明方法在申请的原始内存后插入检测空间,填充并保存该检测数据;在嵌入式系统软件中创建哈希表,内存申请者信息保存在哈希表中;内存使用完成后检测使用后的内存中检测数据与原始检测数据是否一致:不一致表明发生越界,读取对应内存申请者信息并进行反馈;一致则表明未发生越界,在哈希表中删除对应的申请者信息,释放内存;遍历哈希表,在一次遍历过程中,如果相同的内存申请者的记录条数出现两次以上,说明发生内存泄漏。本发明方法从根本上解决了开发者查内存使用错误的难点,降低了了嵌入式软件开发难度,提升了嵌入式软件开发效率。
权利要求

1.一种嵌入式系统中软件所用内存的检测方法,其特征在于,该方法具体是:

(1).在用户申请的原始内存后插入一段检测空间,并在检测空间填充一段检测数据,并另外保存该检测数据;

(2).在嵌入式系统软件中创建哈希表,将内存申请者信息保存在哈希表中,内存申请者信息包括申请到的内存指针、申请内存的文件名和文件行号;

(3).进行越界检测和泄漏检测;

越界检测具体是:内存申请者使用申请到的内存,使用完成后检测使用后的内存所填充的检测数据与保存的原始检测数据是否一致:如果不一致,则表明该次的内存使用发生越界,从哈希表中读取该次使用的内存申请者信息,将越界信息反馈给申请者;如果一致,则表明未发生越界,将该次使用的内存申请者信息在哈希表中删除,然后释放内存;

泄漏检测具体是:遍历哈希表,不断循环依次读取哈希表中存储的内存申请者信息,在一次遍历过程中,如果相同的内存申请者的记录条数出现两次以上,说明该申请者没有正确释放内存,发生内存泄漏。

说明书
技术领域

本发明属于计算机技术领域,涉及一种内存检测方法,具体是一种嵌入式系统中软件所用内存的检测方法。

嵌入式系统使用越来越广泛,很多领域都需要专用的嵌入式硬件和嵌入式软件,其中嵌入式软件考虑到体积和工作效率一般使用微内核(例如Ecos)和比较低级的编程语言 (例如C)进行开发。微内核和低级编程语言的特点是体积小、效率高,但是伴随内存检测功能弱,容错能力弱,在嵌入式软件开发中内存错误是一个很难解决的痛点。在上位机软件中有通用可靠的检测工具,如memoryoverrun,double free,use after free等,但是这些工具不适用于资源受限的嵌入式系统,在上位机软件中有通用可靠的检测工具,如memoryoverrun、double free、use after free等,但是这些工具不适用于资源受限的嵌入式系统。嵌入式系统CPU能力弱,内存远远不如上位机,并且很多工具都不能很好地兼容嵌入式系统选用的微内核,一般常见的内存检测工具都无法很好地在嵌入式系统中运行。内存使用错误会带来严重的后果,并且难以追踪修正。因此,需要一种可靠的检测技术,能够追踪嵌入式软件中的内存错误,帮助开发者定位和修正内存使用错误的问题。

本发明的目的就是提供一种嵌入式软件所用内存的检测方法。

本发明方法具体是:

(1).在用户申请的原始内存后插入一段检测空间,并在检测空间填充一段检测数据,并另外保存该检测数据;

(2).在嵌入式系统软件中创建哈希表,将内存申请者信息保存在哈希表中,内存申请者信息包括申请到的内存指针、申请内存的文件名和文件行号;

(3).进行越界检测和泄漏检测;

越界检测具体是:内存申请者使用申请到的内存,使用完成后检测使用后的内存所填充的检测数据与保存的原始检测数据是否一致:如果不一致,则表明该次的内存使用发生越界,从哈希表中读取该次使用的内存申请者信息,将越界信息反馈给申请者;如果一致,则表明未发生越界,将该次使用的内存申请者信息在哈希表中删除,然后释放内存;

泄漏检测具体是:遍历哈希表,不断循环依次读取哈希表中存储的内存申请者信息,在一次遍历过程中,如果相同的内存申请者的记录条数出现两次以上,说明该申请者没有正确释放内存,发生内存泄漏。

本发明能够检测的内存错误包括内存使用越界和内存泄漏:

内存使用越界,当申请的内存使用的时候产生越界行为时,本发明方法能够及时检测到,并且明确标识越界的内存使用者,软件开发人员能够通过标识很快定位出错误发生的地方,进行修正;

内存泄漏,当申请的内存使用后没有及时释放,就会产生内存泄漏,本发明方法能够监测没有被释放的内存,并且明确标识内存使用者,软件开发人员能够通过记录查内存泄漏。

本发明方法从识别错误类型、记录错误产生原因以及跟踪产生错误的源头等三方面进行设计,从根本上解决了开发者查内存使用错误的难点,降低了了嵌入式软件开发难度,提升了嵌入式软件开发效率。

图1是本发明方法的流程图。

以下结合附图和具体实施对本发明进一步详细说明。

如图1所示,一种嵌入式系统中软件所用内存的检测方法,具体是:

(1).在用户申请的原始内存后插入一段检测空间,并在检测空间填充一段检测数据,并将检测数据保存;检测空间大小用户自由选择,检测数据内容用户自行定义,本实施例中插入四位数据0x5A5A5A5A。

(2).在嵌入式系统软件中创建一张哈希(hash)表,将内存申请者信息保存在哈希表中,内存申请者信息包括申请到的内存指针、申请内存的文件名和文件行号;目的是能够在出错时准确地检测到是什么地方申请的内存发生错误,并且还能给够作为检测内存泄漏的原始数据。

(3).进行越界检测和泄漏检测;

越界检测具体是:内存申请者使用申请到的内存,使用完成后检测使用后的内存所填充的检测数据与保存的原始检测数据0x5A5A5A5A是否一致:如果不一致,则表明该次的内存使用发生越界,从哈希表中读取该次使用的内存申请者信息,将越界信息反馈给申请者,反馈采用系统卡死,同时窗口显示等方式;如果一致,则表明未发生越界,将该次使用的内存申请者信息在哈希表中删除,然后释放内存;

泄漏检测具体是:遍历哈希表,不断循环依次读取哈希表中存储的内存申请者信息,在一次遍历过程中,如果相同的内存申请者的记录条数出现两次以上,说明该申请者没有正确释放内存,发生内存泄漏,将泄漏信息反馈给申请者,如采用窗口显示等方式。

内存越界检测是依赖内存后面增加的检测数据,如果检测数据正确,说明内存使用时没有越界,如果检测信息出现错误,说明内存使用已经越界了。

泄漏检测是不断地读取内存信息hash表,遍历所有没有被释放的内存,之后就能分析数据,到应该需要被释放但是事实上并没有被释放的内存。

检测函数允许内存申请者测传入不同检测级别,用来控制检测的目标包括:只检测所有未被释放内存是否越界;只检测相对上一次检测时是否有新增内存;检测全部还没有被释放的内存。不需要检测时可以关闭检测功能,此时不会再插入检测数据,也不再会生成 hash表。

本文发布于:2023-04-13 08:25:03,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/4/85767.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图