CN102789407A - 内存块有效性检测方法 - Google Patents

内存块有效性检测方法 Download PDF

Info

Publication number
CN102789407A
CN102789407A CN2012101999998A CN201210199999A CN102789407A CN 102789407 A CN102789407 A CN 102789407A CN 2012101999998 A CN2012101999998 A CN 2012101999998A CN 201210199999 A CN201210199999 A CN 201210199999A CN 102789407 A CN102789407 A CN 102789407A
Authority
CN
China
Prior art keywords
block
validity
memory
memory block
free
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
CN2012101999998A
Other languages
English (en)
Other versions
CN102789407B (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.)
Shanghai Feixun Data Communication Technology Co Ltd
Original Assignee
Shanghai Feixun Data Communication Technology 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 Shanghai Feixun Data Communication Technology Co Ltd filed Critical Shanghai Feixun Data Communication Technology Co Ltd
Priority to CN201210199999.8A priority Critical patent/CN102789407B/zh
Publication of CN102789407A publication Critical patent/CN102789407A/zh
Application granted granted Critical
Publication of CN102789407B publication Critical patent/CN102789407B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

本发明提供了一种内存块有效性检测方法,主要包括:获取内存管理***中内存池的起始地址及结束地址;检索内存管理***中的空闲内存块AVL树,收集所有空闲内存块的信息,以数组形式存储,并按照内存块地址进行由低到高排序;判断是否存在空闲块,如果是存在空闲块,检测当前空闲块的有效性,如果不存在空闲块,则检测完成;如果内存块不能通过有效性检测,则作为坏块,提示该坏块的位置以及其详细信息,再获取下一个空闲块循环检测。本发明在不扩展内存块现有组织结构以及不需要增加任何标记消耗额外内存的基础上,能有效地检测出内存管理***中出现的内存坏块,并提示坏块位置及信息,以方便开发人员定位解决出现坏块的原因。

Description

内存块有效性检测方法
【技术领域】
本发明涉及一种内存块有效性检测方法,尤其是涉及嵌入式***中内存块的有效性检测方法。
【背景技术】
针对内存块有效性的检测的方法,例如,内存访问越界的检测方法,现有技术中的解决方案,往往是在内存管理***中通过扩展内存块组织结构,在访问时设置各类标记,并且经过特殊的中间接口进行。在检测过程中,通过检查扩展的内存块结构标记,判断内存是否发生越界。
对于嵌入式***而言,内存资源是非常宝贵的,通过扩展内存块组织结构,设置各类标记,可以一定程度上检测出访问越界的情况,但是必然会增加内存资源的附加消耗,而且随着内存块的增加,消耗的程度更加明显,这将导致实际可用的内存大小被削减。
如:公开号CN 100487658C,公开日为2009年5月13日的中国专利还揭示了一种内存访问越界的检测方法,该检测方法的主要步骤是:在应用程序所申请内存块的前端增加申请该内存块的调用代码地址信息,尾端增加保护字和空闲区长度信息,同时,在空闲区填充保护标记,当应用程序释放内存时,检测是否存在内存写入越界,并提示相关的异常信息。该检测方法设置了保护标记,增加内存资源的附加消耗,而且随着内存块的增加,消耗的程度更加明显,这将导致实际可用的内存大小被削减。
【发明内容】
本发明需解决的技术问题是克服上述的不足,在不需要增加任何标记而消耗额外内存的条件下,提供一种能方便地检测出内存管理***中出现的内存坏块,并提示坏块位置及信息的内存块有效性检测方法。
为解决上述的技术问题,本发明设计了一种内存块有效性检测方法,其包括如下步骤:
step1:获取内存管理***中内存池的起始地址及结束地址,从而确定内存管理***的范围;
step2:检索内存管理***中的空闲内存块AVL树,收集所有空闲内存块的信息,以数组形式存储,并按照内存块地址进行由低到高排序;
step3:判断是否存在空闲块,如果是存在空闲块,执行step4,如果不存在空闲块,则检测完成;
step4:检测当前空闲块的有效性:
step4.1:如果不能通过有效性检测,则作为坏块,提示该坏块的位置以及其详细信息,再获取下一个空闲块并重复step3,即,重复判断是否还存在空闲块,如果还存在空闲块,重复检测该空闲块的有效性;如果不存在空闲块,则检测完成;
step4.2:如果能通过有效性检测,则检测下一个内存块的有效性,如果能通过有效性检测,则执行step5,如果不能通过有效性检测,则作为坏块,提示该坏块的位置以及其详细信息,再获取下一个空闲块并重复step3;
step5:判断再下一个内存块是否为空闲块,如果是空闲块,重复step4;如果不是空闲块,则判断是否为最后一个分配块,如果是最后一个分配块,则检测完成,如果不是最后一个分配块,则执行step6;
step6:检测该分配块的有效性,如果该分配块能通过有效性检测,则重复step5;如果该分配块不能通过有效性检测,则作为坏块,提示该坏块的位置以及其详细信息,再获取下一个空闲块并重复step3。
本发明检测内存块管理***中各个内存块的有效性时,自第一个空闲块开始,依序向后检测各个空闲块的有效性。这样可以检测出更多的坏块。
在上述检测内存块的有效性时,所采用的方法包括:(1)、内存块地址是否对齐,如果不对齐,则该内存块为坏块,如果对齐,则该内存块有效。(2)、检测内存块地址是否超过内存***的管理范围,如果超出,则该内存块为坏块,如果不超出,则该内存块有效。(3)、检测内存块的大小是否对齐(什么大小?空气大小、与谁对齐?),如果对齐,则该内存块为坏块,如果不对齐,则该内存块有效。(4)、检测内存块的大小是否超出内存***管理的范围,如果超出,则该内存块为坏块,如果不超出,则该内存块有效。(5)、检测内存块的前后块地址是否超出内存***管理的范围,如果超出,则该内存块为坏块,如果不超出,则该内存块有效。
作为本发明进一步改进,执行step4.2时,在检测下一个内存块的有效性之前,检查该下一个内存块是否连续,若不连续,则说明该下一个内存块的头部信息被破坏,则为坏块,提示该坏块的位置以及其详细信息,不再进行有效性检测;如果连续,再继续进行有效性检测。
作为本发明进一步改进,在执行step6时,检测该分配块的有效性之前,也先检查该分配块是否连续,若不连续,则说明该分配块的头部信息被破坏,则为坏块,提示该坏块的位置以及其详细信息,不再进行有效性检测;如果连续,再继续进行有效性检测。
在有效性检测之前,先检测是否连续,即可马上判断出是否是坏块,节省程序和时间。
与现有技术相比,本发明在不扩展内存块现有组织结构以及不需要增加任何标记消耗额外内存的基础上,能有效地检测出内存管理***中出现的内存坏块,并提示坏块位置及信息,以方便开发人员定位解决出现坏块的原因。
【附图说明】
图1是本发明实施例内存管理***中内存块结构示意图;
图2是本发明实施例内存管理***中各个内存块维护的内存信息示意图;
图3是本发明实施例内存块有效性检测方法的流程图。
【具体实施方式】
下面结合附图和实施方式对本发明作进一步说明。
本发明内存块有效性检测方法用于检测嵌入式***中内存块的有效性,在嵌入式***中植入该内存块有效性检测方法机制,从而检测出嵌入式***内存中出现的坏块,该坏块可能是内存块访问越界产生的,也有可能是直接内存指针访问破坏了内存块的头部信息造成的。在发现坏块时,提示坏块的位置及坏块的具体信息。
在内存管理***中存在两种类型的内存块,包括:ALLOC块和FREE块。ALLOC块为被使用、已被分配的内存块,在本文中简称分配块;FREE块为空闲内存块,在本文中简称空闲块。
如图1所示,为本发明的一种实施例,内存管理***中ALLOC块和FREE块的示意图。ALLOC块和FREE块交替存在,并且,不存在两个或两个以上的FREE块相邻,所以,FREE块后面相邻的空闲块一定为ALLOC块。并且,最后一个内存块为ALLOC块。
如图2所示,每个内存块(即ALLOC块和FREE)都具有同样的结构,即包括头部信息和用户数据。头部信息中包含了前一个内存块的大小及本内存块的大小和FREE标记(空闲标记)等其他信息,通过这些信息可以获得相邻的前一个内存块及后一个内存块的位置。
本发明内存块有效性检测方法从第一个空闲内存块开始,向其后逐个检查每个内存块的有效性,直到发现坏块,再到达下一个空闲块的位置,自该空闲块开始检测,向其后逐个检查每个内存块的有效性,直到发现坏块,再到达下一个空闲块的位置,循序检测,至无空闲块或最后一个ALLOC块,检测完成,这样可以检测出更多的坏块。如图3所示,内存块有效性检测方法包括的步骤如下:
step1:获取内存管理***中内存池的起始地址及结束地址,从而确定内存管理***的范围,为开始做准备;
step2:检索内存管理***中的空闲内存块AVL树(自平衡二叉查找树),收集所有空闲内存块的信息,以数组形式存储,并按照内存块地址进行由低到高排序,从而获取空闲块链表;
step3:判断是否存在空闲块,如果是存在空闲块,就检测当前空闲块的有效性,即执行下一个步骤step4,如果不存在空闲块,则检测完成。此处判断程序的目的是判断如果内存管理***中已不存在空闲块,则检测完成;反之,则继续检测。
step4:检测当前空闲块的有效性,在本发明的实施方式,自第一个空闲块开始,依序向后检测各个空闲块的有效性:
检测当前空闲块的有效性时,存在两种情况:
第一种情况(即step4.1):如果当前空闲块不能通过有效性检测,则作为坏块,提示该坏块的位置以及其详细信息,再获取下一个空闲块并重复step3,即,重复判断是否还存在空闲块,如果还存在空闲块,重复检测该空闲块的有效性;如果不存在空闲块,则检测完成。换句话说,如果第一个空闲块或第N个空闲块(N代表自然数)为坏块,则检测程序跳到下一个空闲块,即获取下一个空闲块,如果后面不再存在空闲块,则检测完成;如果还存在空闲块,则继续检测当前空闲块的有效性,循序检测。
第二种情况(step4.2):如果当前空闲块能通过有效性检测,则检测下一个内存块的有效性,如果能通过有效性检测,则判断再下一个内存块是否为空闲块,执行step5,如果不能通过有效性检测,则作为坏块,提示该坏块的位置以及其详细信息,再获取下一个空闲块并重复step3。换句话说,如果第一个空闲块或第N个空闲块(N代表自然数)通过有效性检测,则不是坏块,则检测第一个空闲块或第N个空闲块后面的ALLOC块,检测第一个空闲块或第N个空闲块后面的ALLOC块可能是1个、2个或3个或N个。如果后面的ALLOC块出现坏块,则检测程序跳到下一个空闲块,即获取下一个空闲块,如果后面不再存在空闲块,则检测完成;如果还存在空闲块,则继续检测当前空闲块的有效性,循序检测。如果第一个空闲块或第N个空闲块的下一个内存块(即为ALLOC块)通过有效性检测,不是坏块,则获取再下一个内存块,该内存块可能是空闲块,也可能亦是ALLOC块,后面则根据step5来执行。
step5:判断再下一个内存块是否为空闲块,如果是空闲块,重复step4;如果不是空闲块,则判断是否为最后一个分配块,如果是最后一个分配块,则检测完成,如果不是最后一个分配块,则执行step6。
step6:检测该分配块的有效性,如果该分配块能通过有效性检测,则重复step5;如果该分配块不能通过有效性检测,则作为坏块,提示该坏块的位置以及其详细信息,再获取下一个空闲块并重复step3。
在本发明的实施方式中,检测内存块的有效性所采用的方法包括:(1)、内存块地址是否对齐,如果不对齐,则该内存块为坏块,如果对齐,则该内存块有效。(2)、检测内存块地址是否超过内存***的管理范围,如果超出,则该内存块为坏块,如果不超出,则该内存块有效。(3)、检测内存块的大小是否对齐(什么大小?空气大小、与谁对齐?),如果对齐,则该内存块为坏块,如果不对齐,则该内存块有效。(4)、检测内存块的大小是否超出内存***管理的范围,如果超出,则该内存块为坏块,如果不超出,则该内存块有效。(5)、检测内存块的前后块地址是否超出内存***管理的范围,如果超出,则该内存块为坏块,如果不超出,则该内存块有效。
在检测时,上述5种方法应当全部检测,只要其中1种方法检测出坏块,则不再检测其他的方法。
检测空闲块后面的下一个空闲块或再下一个空闲块的有效性时,在采用上述5种方法之前,先检查该下一个空闲块是否连续,(连续是指下一个内存块的上一个块是否为当前块),若不连续,则说明该下一个内存块的头部信息被破坏,则为坏块,提示该坏块的位置以及其详细信息,不再进行上述5种方法的有效性检测;如果连续,再继续进行述5种方法的有效性检测。
本发明在不扩展内存块现有组织结构以及不需要增加任何标记消耗额外内存的基础上,能有效地检测出内存管理***中出现的内存坏块,并提示坏块位置及信息,以方便开发人员定位解决出现坏块的原因。
以上所述的仅是本发明的实施方式,在此应当指出,对于本领域的普通技术人员来说,在不脱离本发明创造构思的前提下,还可以做出改进,但这些均属于本发明的保护范围。

Claims (9)

1.一种内存块有效性检测方法,其特征在于:所述内存块有效性检测方法包括如下步骤:
step1:获取内存管理***中内存池的起始地址及结束地址,从而确定内存管理***的范围;
step2:检索内存管理***中的空闲内存块AVL树,收集所有空闲内存块的信息,以数组形式存储,并按照内存块地址进行由低到高排序;
step3:判断是否存在空闲块,如果是存在空闲块,执行step4,如果不存在空闲块,则检测完成;
step4:检测当前空闲块的有效性:
step4.1:如果不能通过有效性检测,则作为坏块,提示该坏块的位置以及其详细信息,再获取下一个空闲块并重复step3,即,重复判断是否还存在空闲块,如果还存在空闲块,重复检测该空闲块的有效性;如果不存在空闲块,则检测完成;
step4.2:如果能通过有效性检测,则检测下一个内存块的有效性,如果能通过有效性检测,则执行step5,如果不能通过有效性检测,则作为坏块,提示该坏块的位置以及其详细信息,再获取下一个空闲块并重复step3;
step5:判断再下一个内存块是否为空闲块,如果是空闲块,重复step4;如果不是空闲块,则判断是否为最后一个分配块,如果是最后一个分配块,则检测完成,如果不是最后一个分配块,则执行step6;
step6:检测该分配块的有效性,如果该分配块能通过有效性检测,则重复step5;如果该分配块不能通过有效性检测,则作为坏块,提示该坏块的位置以及其详细信息,再获取下一个空闲块并重复step3。
2.根据权利要求1所述的内存块有效性检测方法,其特征在于:自第一个空闲块开始,依序向后检测各个空闲块的有效性。
3.根据权利要求1所述的内存块有效性检测方法,其特征在于:检测内存块的有效性的方法是:检测内存块地址是否对齐,如果不对齐,则该内存块为坏块,如果对齐,则该内存块有效。 
4.根据权利要求1所述的内存块有效性检测方法,其特征在于:检测内存块的有效性的方法是:检测内存块地址是否超过内存***的管理范围,如果超出,则该内存块为坏块,如果不超出,则该内存块有效。
5.根据权利要求1所述的内存块有效性检测方法,其特征在于:检测内存块的有效性的方法是:检测内存块的大小是否对齐(什么大小?空气大小、与谁对齐?),如果对齐,则该内存块为坏块,如果不对齐,则该内存块有效。
6.根据权利要求1所述的内存块有效性检测方法,其特征在于:检测内存块的有效性的方法是:检测内存块的大小是否超出内存***管理的范围,如果超出,则该内存块为坏块,如果不超出,则该内存块有效。
7.根据权利要求1所述的内存块有效性检测方法,其特征在于:检测内存块的有效性的方法是:检测内存块的前后块地址是否超出内存***管理的范围,如果超出,则该内存块为坏块,如果不超出,则该内存块有效。
8.根据权利要求2-7中任意一项所述的内存块有效性检测方法,其特征在于:执行step4.2时,在检测下一个内存块的有效性之前,检查该下一个内存块是否连续,若不连续,则说明该下一个内存块的头部信息被破坏,则为坏块,提示该坏块的位置以及其详细信息,不再进行有效性检测;如果连续,再继续进行有效性检测。
9.根据权利要求8所述的内存块有效性检测方法,其特征在于:执行step6时,检测该分配块的有效性之前,检查该分配块是否连续,若不连续,则说明该分配块的头部信息被破坏,则为坏块,提示该坏块的位置以及其详细信息,不再进行有效性检测;如果连续,再继续进行有效性检测。 
CN201210199999.8A 2012-06-18 2012-06-18 内存块有效性检测方法 Active CN102789407B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201210199999.8A CN102789407B (zh) 2012-06-18 2012-06-18 内存块有效性检测方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210199999.8A CN102789407B (zh) 2012-06-18 2012-06-18 内存块有效性检测方法

Publications (2)

Publication Number Publication Date
CN102789407A true CN102789407A (zh) 2012-11-21
CN102789407B CN102789407B (zh) 2015-05-27

Family

ID=47154814

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210199999.8A Active CN102789407B (zh) 2012-06-18 2012-06-18 内存块有效性检测方法

Country Status (1)

Country Link
CN (1) CN102789407B (zh)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103092709A (zh) * 2013-01-22 2013-05-08 浪潮电子信息产业股份有限公司 一种内存错误处理方法
CN103744742A (zh) * 2013-12-31 2014-04-23 上海斐讯数据通信技术有限公司 一种内存坏块的修复方法
CN106250242A (zh) * 2016-08-10 2016-12-21 西安诺瓦电子科技有限公司 基于操作***的内存复用方法及装置
CN106681829A (zh) * 2016-12-09 2017-05-17 上海斐讯数据通信技术有限公司 一种内存管理方法及***
CN107885596A (zh) * 2017-06-22 2018-04-06 叶雅敏 用于音视频解码、编码的高频访问内存的程序优化方法
CN109471771A (zh) * 2018-10-19 2019-03-15 许昌许继软件技术有限公司 一种Nucleus***的动态内存池监测方法及装置
CN109979518A (zh) * 2019-03-07 2019-07-05 深圳警翼智能科技股份有限公司 用于执法记录仪存储介质的坏区标识方法及***

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040078700A1 (en) * 2002-09-12 2004-04-22 Samsung Electro-Mechanics Co., Ltd. Apparatus and method for processing defects in memories
CN101013396A (zh) * 2007-02-07 2007-08-08 重庆重邮信科股份有限公司 一种分块内存的申请和释放方法
CN101110042A (zh) * 2006-07-20 2008-01-23 中兴通讯股份有限公司 一种检测内存访问越界的方法
CN101599046A (zh) * 2009-06-26 2009-12-09 深圳市茁壮网络股份有限公司 一种内存检测方法及装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040078700A1 (en) * 2002-09-12 2004-04-22 Samsung Electro-Mechanics Co., Ltd. Apparatus and method for processing defects in memories
CN101110042A (zh) * 2006-07-20 2008-01-23 中兴通讯股份有限公司 一种检测内存访问越界的方法
CN101013396A (zh) * 2007-02-07 2007-08-08 重庆重邮信科股份有限公司 一种分块内存的申请和释放方法
CN101599046A (zh) * 2009-06-26 2009-12-09 深圳市茁壮网络股份有限公司 一种内存检测方法及装置

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103092709A (zh) * 2013-01-22 2013-05-08 浪潮电子信息产业股份有限公司 一种内存错误处理方法
CN103744742A (zh) * 2013-12-31 2014-04-23 上海斐讯数据通信技术有限公司 一种内存坏块的修复方法
CN106250242A (zh) * 2016-08-10 2016-12-21 西安诺瓦电子科技有限公司 基于操作***的内存复用方法及装置
CN106681829A (zh) * 2016-12-09 2017-05-17 上海斐讯数据通信技术有限公司 一种内存管理方法及***
CN106681829B (zh) * 2016-12-09 2020-07-24 北京康吉森技术有限公司 一种内存管理方法及***
CN107885596A (zh) * 2017-06-22 2018-04-06 叶雅敏 用于音视频解码、编码的高频访问内存的程序优化方法
CN107885596B (zh) * 2017-06-22 2021-06-15 叶雅敏 用于音视频解码、编码的高频访问内存的程序优化方法
CN109471771A (zh) * 2018-10-19 2019-03-15 许昌许继软件技术有限公司 一种Nucleus***的动态内存池监测方法及装置
CN109979518A (zh) * 2019-03-07 2019-07-05 深圳警翼智能科技股份有限公司 用于执法记录仪存储介质的坏区标识方法及***
CN109979518B (zh) * 2019-03-07 2021-04-20 深圳警翼智能科技股份有限公司 用于执法记录仪存储介质的坏区标识方法及***

Also Published As

Publication number Publication date
CN102789407B (zh) 2015-05-27

Similar Documents

Publication Publication Date Title
CN102789407A (zh) 内存块有效性检测方法
CN100590606C (zh) 闪速存储器数据完整性保护方法
CN106776359B (zh) 一种NAND Flash坏块管理方法及***
CN101446921B (zh) 一种Flash存储器的动态存储方法
WO2009095902A3 (en) Systems and methods for handling immediate data errors in flash memory
CN103823642B (zh) 用于Flash均衡存储的方法及***
CN102629234B (zh) 一种单片机片内置Flash数据快速检索方法
CN101719095A (zh) 一种回归测试的管理方法及装置
WO2012074554A3 (en) Transaction log recovery
CN103208314A (zh) 嵌入式***的内存测试方法及嵌入式***
CN103366831A (zh) 存储器的检测方法
CN103699598A (zh) 一种图形化展示数据引用流程的方法及其装置
CN103593257A (zh) 一种数据备份方法及装置
CN105511803A (zh) 一种存储介质的擦除中断处理方法
CN103914397A (zh) 闪存存储设备及其管理方法
CN105009073B (zh) 用于将数据更高效地转发到依赖指令的方法和设备
US20110276831A1 (en) Utilizing Input/Output Paths For Failure Detection And Analysis
CN107807870B (zh) 一种存储服务器主板掉电保护功能的测试方法和***
CN103778968A (zh) 结合多张快闪记忆卡的固态硬盘的检测装置及其方法
CN103279329A (zh) 支持同步edac校验的高效取指流水线
CN106155704A (zh) 一种阻止应用程序相互唤醒的方法和***
CN103870204A (zh) 一种cache中数据写入和读取方法、cache控制器
CN103677971B (zh) 多线程处理***及方法
CN103684688A (zh) 一种星载软件内存单粒子实时防护方法
CN107783725A (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
PP01 Preservation of patent right

Effective date of registration: 20180313

Granted publication date: 20150527

PP01 Preservation of patent right
PD01 Discharge of preservation of patent
PD01 Discharge of preservation of patent

Date of cancellation: 20210313

Granted publication date: 20150527

PP01 Preservation of patent right
PP01 Preservation of patent right

Effective date of registration: 20210313

Granted publication date: 20150527

PD01 Discharge of preservation of patent
PD01 Discharge of preservation of patent

Date of cancellation: 20240313

Granted publication date: 20150527