CN100462925C - 自动释放嵌入式系统中应用程序模块泄漏内存的方法 - Google Patents
自动释放嵌入式系统中应用程序模块泄漏内存的方法 Download PDFInfo
- Publication number
- CN100462925C CN100462925C CNB200510130088XA CN200510130088A CN100462925C CN 100462925 C CN100462925 C CN 100462925C CN B200510130088X A CNB200510130088X A CN B200510130088XA CN 200510130088 A CN200510130088 A CN 200510130088A CN 100462925 C CN100462925 C CN 100462925C
- Authority
- CN
- China
- Prior art keywords
- memory
- application program
- internal memory
- index
- program module
- 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.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims abstract description 24
- 238000007599 discharging Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 1
- 230000007334 memory performance Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
Images
Landscapes
- Storage Device Security (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种自动释放嵌入式系统中应用程序模块泄漏内存的方法,包括以下步骤:(a)进入应用程序模块,对该模块设置身份标识、内存使用情况标识,建立若干空的内存地址索引项,分别指向确定的内存索引地址;(b)应用程序模块利用空闲的内存地址索引项申请空闲内存块,记录该内存块索引地址及大小;(c)应用程序模块结束操作,若申请内存的索引地址处的内存块大小与所申请内存块大小相同,释放该内存块,设置对应内存地址索引项为空;(d)应用程序模块退出,释放该模块对应的非空内存索引项对应的内存,设置该内存索引项为空,释放该模块的所有内存索引。本发明解决了嵌入式系统中内存泄漏的问题,有效地利用了内存空间。
Description
技术领域
本发明涉及一种释放内存的方法,特别地涉及一种自动释放嵌入式系统中应用程序模块泄漏内存的方法,属于计算机技术领域。
背景技术
嵌入式系统是一种资源比较受限的系统,资源要比桌面PC更为宝贵,因而内存有效使用的重要性勿庸置疑。如何利用好有限的内存发挥最大效能,就成了嵌入式系统进一步发展的关键问题。
目前,大多数嵌入式系统采用的是实存储器管理策略,对于内存的访问是直接的,也即直接送到地址线上输出,所有程序中访问的地址都是实际的物理地址;而且,大多数嵌入式操作系统对内存空间没有保护,各个程序运行实际上共享一个运行空间。一个程序在执行前,系统必须为它分配足够的地址空间,而用户内存空间为RAM中全局数据和任务堆栈空间都分配后的剩余空间,为了使程序能有足够的内存运行,必须在申请的内存不用后及时地将其释放,以确保再次申请时能有空间。如果程序中存在内存泄漏(即申请内存后没有及时释放)的情况,程序最终会因为没有足够的内存空间而无法运行。因此如何有效地自动释放嵌入式系统中应用程序模块未释放内存是亟待解决的一个问题。
发明内容
本发明要解决的技术问题是:提出一种能够自动监测未释放的内存,并自动释放的方法,为内存的有效使用提供条件。
本发明的思路是:在嵌入式系统中,通常有多个功能较为单一的应用程序模块,当进入某个模块后,记录该模块申请、释放的内存地址,当退出该模块时,释放该模块申请但是还没有释放的内存,从而避免内存泄漏的发生。
本发明是通过下述技术手段来实现的:
一种自动释放嵌入式系统中应用程序模块泄漏内存的方法,包括以下步骤:
(a)进入应用程序模块时,对该应用程序模块设置身份标识、以及内存使用情况标识,同时建立若干个空的内存地址索引项,每一个内存地址索引项指向一个内存索引地址;
(b)应用程序模块利用空闲的内存地址索引项申请空闲内存块,记录该应用程序模块所使用内存块的索引地址及其大小;
(c)应用程序模块结束操作,判断申请内存的索引地址处的内存块大小与申请的内存块大小是否相同,如果相同,则释放该内存块,并设置对应的内存地址索引项为空,如果不相同,发出报警提示;
(d)应用程序模块退出时,查找该应用程序模块申请对应的所有内存索引项,释放非空内存索引项对应的内存,设置该非空内存索引项为空,然后释放该应用程序模块的所有内存索引所占用的内存。
进一步地,所述的步骤(a)中,所有的内存索引为数组,数组大小为应用程序模块的最大使用值。
进一步地,所述的步骤(a)中,所有的内存索引为动态链表形式,在内存申请时自动添加。
进一步地,所述的步骤(b)中,申请内存的大小为:应用程序模块运行所需内存与内存索引地址指针长度之和。
更进一步地,所述的内存索引地址指针长度为4。
进一步地,所述的步骤(c)中,释放内存的大小为:释放内存块与内存索引地址指针长度之和。
进一步地,所述的步骤(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的内存索引区。
Claims (7)
1、一种自动释放嵌入式系统中应用程序模块泄漏内存的方法,包括以下步骤:
(a)进入应用程序模块时,对该应用程序模块设置身份标识、以及内存使用情况标识,同时建立若干个空的内存地址索引项,每一个内存地址索引项指向一个内存索引地址;
(b)应用程序模块利用空闲的内存地址索引项申请空闲内存块,记录该应用程序模块所使用内存块的索引地址及其大小;
(c)应用程序模块结束操作,判断申请内存的索引地址处的内存块大小与申请的内存块大小是否相同:如果相同,则释放该内存块,并设置对应的内存地址索引项为空,如果不相同,发出报警提示;
(d)应用程序模块退出时,查找该应用程序模块申请对应的所有内存索引项,释放非空内存索引项对应的内存,设置该非空内存索引项为空,然后释放该应用程序模块的所有内存索引所占用的内存。
2、如权利要求1所述的自动释放嵌入式系统中泄漏内存的方法,其特征在于:所述的步骤(a)中,所有的内存索引为数组,数组大小为应用程序模块的最大使用值。
3、如权利要求1所述的自动释放嵌入式系统中泄漏内存的方法,其特征在于:所述的步骤(a)中,所有的内存索引为动态链表形式,在内存申请时自动添加。
4、如权利要求1所述的自动释放嵌入式系统中泄漏内存的方法,其特征在于:所述的步骤(b)中,申请内存的大小为:应用程序模块运行所需内存与内存索引地址指针长度之和。
5、如权利要求4所述的自动释放嵌入式系统中泄漏内存的方法,其特征在于:所述的内存索引地址指针长度为4。
6、如权利要求1所述的自动释放嵌入式系统中泄漏内存的方法,其特征在于:所述的步骤(c)中,释放内存的大小为:释放内存块与内存索引地址指针长度之和。
7、如权利要求1所述的自动释放嵌入式系统中泄漏内存的方法,其特征在于:所述的步骤(c)中,如果释放内存地址错误时,发出报警提示。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB200510130088XA CN100462925C (zh) | 2005-12-08 | 2005-12-08 | 自动释放嵌入式系统中应用程序模块泄漏内存的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB200510130088XA CN100462925C (zh) | 2005-12-08 | 2005-12-08 | 自动释放嵌入式系统中应用程序模块泄漏内存的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1979429A CN1979429A (zh) | 2007-06-13 |
CN100462925C true CN100462925C (zh) | 2009-02-18 |
Family
ID=38130607
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB200510130088XA Expired - Fee Related CN100462925C (zh) | 2005-12-08 | 2005-12-08 | 自动释放嵌入式系统中应用程序模块泄漏内存的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100462925C (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103729300B (zh) * | 2013-12-25 | 2017-11-28 | 华为技术有限公司 | 非易失内存的管理方法和相关装置 |
CN112100089B (zh) * | 2020-07-30 | 2023-08-01 | 重庆兰德适普信息科技有限公司 | 内存管理方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2002259142A (ja) * | 2001-03-02 | 2002-09-13 | Nec Eng Ltd | アプリケーション切替制御方式 |
CN1466057A (zh) * | 2002-06-20 | 2004-01-07 | 华为技术有限公司 | 一种软件内存泄露的检查方法 |
CN1141644C (zh) * | 1999-11-20 | 2004-03-10 | 深圳市中兴通讯股份有限公司 | 一种嵌入处理机内存的检测和监控方法 |
CN1538300A (zh) * | 2003-09-23 | 2004-10-20 | 中兴通讯股份有限公司 | 一种实现嵌入式实时系统内存泄漏检测和定位的方法 |
US20050235127A1 (en) * | 2004-04-19 | 2005-10-20 | Cisco Technology, Inc. | Method and system for memory leak detection |
-
2005
- 2005-12-08 CN CNB200510130088XA patent/CN100462925C/zh not_active Expired - Fee Related
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1141644C (zh) * | 1999-11-20 | 2004-03-10 | 深圳市中兴通讯股份有限公司 | 一种嵌入处理机内存的检测和监控方法 |
JP2002259142A (ja) * | 2001-03-02 | 2002-09-13 | Nec Eng Ltd | アプリケーション切替制御方式 |
CN1466057A (zh) * | 2002-06-20 | 2004-01-07 | 华为技术有限公司 | 一种软件内存泄露的检查方法 |
CN1538300A (zh) * | 2003-09-23 | 2004-10-20 | 中兴通讯股份有限公司 | 一种实现嵌入式实时系统内存泄漏检测和定位的方法 |
US20050235127A1 (en) * | 2004-04-19 | 2005-10-20 | Cisco Technology, Inc. | Method and system for memory leak detection |
Also Published As
Publication number | Publication date |
---|---|
CN1979429A (zh) | 2007-06-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102137761B1 (ko) | 이종 통합 메모리부 및 그것의 확장 통합 메모리 스페이스 관리 방법 | |
US6463509B1 (en) | Preloading data in a cache memory according to user-specified preload criteria | |
CN100487658C (zh) | 一种检测内存访问越界的方法 | |
US9092323B2 (en) | Systems and methods for recovering addressing data | |
US20160004468A1 (en) | Data-storage device and flash memory control method | |
CN106919454B (zh) | 基于lte协议栈的内存池问题定位方法及其系统 | |
CN101344861B (zh) | 一种智能卡内存管理方法 | |
CN100472459C (zh) | 自动释放嵌入式系统中应用程序模块泄漏内存的系统 | |
EP2511826B1 (en) | Level-to-level management method and system of storage resources | |
CN108038062B (zh) | 嵌入式系统的内存管理方法和装置 | |
CN103902475B (zh) | 一种基于队列管理机制的固态硬盘并行访问方法及装置 | |
CN110750372B (zh) | 基于共享内存的日志系统及日志管理方法 | |
CN100392606C (zh) | 一种定位虚拟操作系统内存泄漏的方法 | |
CN106407224A (zh) | 一种键值存储系统中文件压实的方法和装置 | |
CN102063338A (zh) | 一种请求独占资源的方法及装置 | |
CN104317734A (zh) | 一种适用于slab的内存分配方法及装置 | |
CN100580669C (zh) | 在Flash存储介质上的关于文件分配表的缓存实现方法 | |
US20240192877A1 (en) | Super block management method and apparatus | |
US20080294866A1 (en) | Method And Apparatus For Memory Management | |
CN100462925C (zh) | 自动释放嵌入式系统中应用程序模块泄漏内存的方法 | |
CN111181874B (zh) | 一种报文处理方法、装置及存储介质 | |
CN105469173A (zh) | 一种静态内存进行优化管理的方法 | |
CN100487657C (zh) | 嵌入式系统中自动监测内存泄漏与内存越界的方法 | |
CN105389216A (zh) | 一种剪切板数据缓存处理方法、装置和电子设备 | |
CN104951370A (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 | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20090218 |