自动释放嵌入式系统中应用程序模块泄漏内存的方法

阅读: 评论:0

著录项
  • CN200510130088.X
  • 20051208
  • CN1979429
  • 20070613
  • 中兴通讯股份有限公司
  • 蒋敏
  • G06F9/50(2006.01)
  • G06F9/50(2006.01) G06F12/02(2006.01)

  • 广东省深圳市南山区高新技术产业园科技南路中兴通讯大厦法律部
  • 中国,CN,广东(44)
  • 北京安信方达知识产权代理有限公司
  • 许志勇;颜涛
摘要
本发明公开了一种自动释放嵌入式系统中应用程序模块泄漏内存的方法,包括以下步骤:(a)进入应用程序模块,对该模块设置身份标识、内存使用情况标识,建立若干空的内存地址索引项,分别指向确定的内存索引地址;(b)应用程序模块利用空闲的内存地址索引项申请空闲内存块,记录该内存块索引地址及大小;(c)应用程序模块结束操作,若申请内存的索引地址处的内存块大小与所申请内存块大小相同,释放该内存块,设置对应内存地址索引项为空;(d)应用程序模块退出,释放该模块对应的非空内存索引项对应的内存,设置该内存索引项为空,释放该模块的所有内存索引。本发明解决了嵌入式系统中内存泄漏的问题,有效地利用了内存空间。
权利要求

1、一种自动释放嵌入式系统中应用程序模块泄漏内存的方法,包括以 下步骤:

(a)进入应用程序模块时,对该应用程序模块设置身份标识、以及内存 使用情况标识,同时建立若干个空的内存地址索引项,每一个内存地址索引 项指向一个内存索引地址;

(b)应用程序模块利用空闲的内存地址索引项申请空闲内存块,记录该 应用程序模块所使用内存块的索引地址及其大小;

(c)应用程序模块结束操作,判断申请内存的索引地址处的内存块大小 与申请的内存块大小是否相同,如果相同,则释放该内存块,并设置对应的 内存地址索引项为空;

(d)应用程序模块退出时,查该应用程序模块申请对应的所有内存索 引项,释放非空内存索引项对应的内存,设置该内存索引项为空,然后释放 该模块的所有内存索引。

2、如权利要求1所述的自动释放嵌入式系统中泄漏内存的方法,其特 征在于:所述的步骤(a)中,所有的内存索引为数组,数组大小为应用程序模 块的最大使用值。

3、如权利要求1所述的自动释放嵌入式系统中泄漏内存的方法,其特 征在于:所述的步骤(a)中,所有的内存索引为动态链表形式,在内存申请时 自动添加。

4、如权利要求1所述的自动释放嵌入式系统中泄漏内存的方法,其特 征在于:所述的步骤(b)中,申请内存的大小为:应用程序模块运行所需内 存与内存索引地址指针长度之和。

5、如权利要求4所述的自动释放嵌入式系统中泄漏内存的方法,其特 征在于:所述的内存索引地址指针长度为4。

7、如权利要求5所述的自动释放嵌入式系统中泄漏内存的方法,其特 征在于:所述的内存索引地址指针长度为4。

6、如权利要求1所述的自动释放嵌入式系统中泄漏内存的方法,其特 征在于:所述的步骤(c)中,释放内存的大小为:释放内存块与内存索引地址 指针长度之和。

8、如权利要求1所述的自动释放嵌入式系统中泄漏内存的方法,其特 征在于:所述的步骤(c)中,释放内存大小与申请的内存大小不相同以及释放 内存地址错误时,发出报警提示。

说明书
技术领域

技术领域

本发明涉及一种释放内存的方法,特别地涉及一种自动释放嵌入式系统 中应用程序模块泄漏内存的方法,属于计算机技术领域。

背景技术

嵌入式系统是一种资源比较受限的系统,资源要比桌面PC更为宝贵, 因而内存有效使用的重要性勿庸置疑。如何利用好有限的内存发挥最大效 能,就成了嵌入式系统进一步发展的关键问题。

目前,大多数嵌入式系统采用的是实存储器管理策略,对于内存的访问 是直接的,也即直接送到地址线上输出,所有程序中访问的地址都是实际的 物理地址;而且,大多数嵌入式操作系统对内存空间没有保护,各个程序运 行实际上共享一个运行空间。一个程序在执行前,系统必须为它分配足够的 地址空间,而用户内存空间为RAM中全局数据和任务堆栈空间都分配后的 剩余空间,为了使程序能有足够的内存运行,必须在申请的内存不用后及时 地将其释放,以确保再次申请时能有空间。如果程序中存在内存泄漏(即申 请内存后没有及时释放)的情况,程序最终会因为没有足够的内存空间而无 法运行。因此如何有效地自动释放嵌入式系统中应用程序模块未释放内存是 亟待解决的一个问题。

发明内容

本发明要解决的技术问题是:提出一种能够自动监测未释放的内存,并 自动释放的方法,为内存的有效使用提供条件。

本发明的思路是:在嵌入式系统中,通常有多个功能较为单一的应用程 序模块,当进入某个模块后,记录该模块申请、释放的内存地址,当退出该 模块时,释放该模块申请但是还没有释放的内存,从而避免内存泄漏的发生。

本发明是通过下述技术手段来实现的:

一种自动释放嵌入式系统中应用程序模块泄漏内存的方法,包括以下步 骤:

(a)进入应用程序模块时,对该应用程序模块设置身份标识、以及内存 使用情况标识,同时建立若干个空的内存地址索引项,每一个内存地址索引 项指向一个内存索引地址;

(b)应用程序模块利用空闲地内存地址索引项申请空闲内存块,记录该 应用程序模块所使用内存块的索引地址及其大小;

(c)应用程序模块结束操作,判断申请内存的索引地址处的内存块大小 与申请的内存块大小是否相同,如果相同,则释放该内存块,并设置对应的 内存地址索引项为空;

(d)应用程序模块退出时,查该应用程序模块申请对应的所有内存索 引项,释放非空内存索引项对应的内存,设置该内存索引项为空,然后释放 该模块的所有内存索引。

进一步地,所述的步骤(a)中,所有的内存索引为数组,数组大小为应用 程序模块的最大使用值。

进一步地,所述的步骤(a)中,所有的内存索引为动态链表形式,在内存 申请时自动添加。

进一步地,所述的步骤(b)中,申请内存的大小为:应用程序模块运行所 需内存与内存索引地址指针长度之和。

更进一步地,所述的内存索引地址指针长度为4。

进一步地,所述的步骤(c)中,释放内存的大小为:释放内存块与内存索 引地址指针长度之和。

更进一步地,所述的内存索引地址指针长度为4。

进一步地,所述的步骤(c)中,释放内存大小与申请的内存大小不相同以 及释放内存地址错误时,发出报警提示。

本发明所提出的方法能够自动监测未释放的内存,并进行自动释放,为 嵌入式系统中内存的有效使用提供条件。

附图说明

图1为本发明具体实施例中自动释放嵌入式系统中应用程序模块泄漏 内存的方法的实现流程图。

具体实施方式

下面结合附图和具体实施例对本发明作进一步的介绍,但不作为对本发 明的限定。

参考图1所示,为自动释放嵌入式系统中应用程序模块泄漏内存的方法 流程图,该方法实现过程中包括如下步骤:

步骤101:进入应用程序模块M时,初始化一块区域,该区域包括模块 M的内存控制区和内存索引区,其中:内存控制区用于保存模块M的ID标 识,模块M对内存的使用情况等;内存索引区记录模块M分配的内存地址, 该区域包括多个内存索引项,每一个内存索引项指向一个内存地址,初始状 态时,内存索引项均置为空闲。内存索引区可以是数组,数组的大小根据模 块M对内存的使用情况确定一个合理的最大值;也可以是链表的形式,在 模块M申请内存的时候动态的添加。

步骤102:应用程序模块M启动后,申请大小为Size的内存,执行其 操作进程,具体实现过程如下:

(1)在模块M的内存索引区中查一个空闲的内存索引项S1,该内 存索引项S1指向的内存索引地址为DS1;

(2)通过系统提供的内存分配函数申请大小为Size+Head的一个内存 块D1,其中Head的大小为内存地址指针的长度,一般为4,该内存块D1 对应的内存索引地址为DS1。

此时,模块内存控制区中对应记录模块M对内存的使用情况,包括: 使用地址、占用内存块大小。

步骤103:应用程序模块M完成操作后,释放内存P,具体实现过程如 下:

读取P-Head处的内存索引地址DS1,如果内存索引地址DS1处的内存 块D1的大小等于内存块P-Head的大小,释放内存块P-Head,设置DS1 的内容为空,继续执行下一步骤;如果内存块D1的大小不等于内存块P-Head 的大小,说明需要释放的内存P地址是错误的或者是该内存块遭到破坏,进 行报警,并报告内存释放错误。

步骤104:应用程序模块M退出进程,判断其是否存在泄漏内存,如果 存在,继续释放泄漏内存空间,该操作的实现过程如下:

(1)查应用程序模块M对应的所有内存索引项,如果有某个内存索 引项不为空,说明该应用程序模块M有内存泄漏,释放对应的内存块,设 置该内存索引项为空,并报告内存泄漏地址;

(2)释放该模块M的内存索引区。

本文发布于:2023-04-14 04:58:52,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/1/86964.html

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

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