CN101013396A - 一种分块内存的申请和释放方法 - Google Patents

一种分块内存的申请和释放方法 Download PDF

Info

Publication number
CN101013396A
CN101013396A CN 200710078181 CN200710078181A CN101013396A CN 101013396 A CN101013396 A CN 101013396A CN 200710078181 CN200710078181 CN 200710078181 CN 200710078181 A CN200710078181 A CN 200710078181A CN 101013396 A CN101013396 A CN 101013396A
Authority
CN
China
Prior art keywords
memory
block
releasing
application
header extension
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.)
Pending
Application number
CN 200710078181
Other languages
English (en)
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.)
Chongqing Cyit Communication Technologies Co Ltd
Original Assignee
CHORGYOU XINKE Co Ltd CHONGQING
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 CHORGYOU XINKE Co Ltd CHONGQING filed Critical CHORGYOU XINKE Co Ltd CHONGQING
Priority to CN 200710078181 priority Critical patent/CN101013396A/zh
Publication of CN101013396A publication Critical patent/CN101013396A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Storage Device Security (AREA)

Abstract

本发明提出一种新的分块内存申请和释放方法,能在很大程度上保证在没有发生内存越界等异常情况的前提下正确释放分块内存,克服现有技术简单的内存释放给系统带来严重的后果等缺点,对系统起到保护作用。另外,在发生内存越界等异常情况时,还可以根据需要进行断言(简称为assert)等相应的处理。本发明内存申请和释放方法在程序需要释放内存时,首先判断是否为采用现有技术的MALLOC或其他方式申请的内存,如是则采用现有技术的FREE或其他方式释放。否则,进一步判断该内存块头部扩展区中的内存块状态信息,如果是“已申请”则正常释放该内存并将头部扩展区中的内存块状态信息置成“已释放”,否则,根据需要进行相应处理(如assert)。

Description

一种分块内存的申请和释放方法
技术领域
本发明涉及一种通信设备中分块内存的申请和释放方法。
背景技术
在现代通信设备中,内存是其主要组成部分。通信设备中内存的主要作用在于临时存储系统需要暂存的数据,在系统处理过程中调用内存中存储的数据,在处理完毕后则清除内存中的数据,以便于新的数据存入。现有技术的内存管理方法一般是预先向操作系统申请一块存储量较大的内存区,再将该内存区划分为若干内存池,每个内存池中又划分为若干存储量大小不一且固定不变的内存块,各种存储量大小内存块的数量可根据需要配置。当程序需要使用内存时(例如为一个指针变量申请一块内存),需先申请一块内存,程序会根据具体需要申请的内存存储量大小寻找合适的内存块,将分配的内存块起始地址返回给程序的指针变量。而当程序不再继续使用内存时,就会释放上述内存块。常用的释放方法就是将该指针判断为空指针,如果不是空指针则释放该指针指向的分块内存。
由于程序越来越复杂和庞大,现有的分块内存申请和释放方法较为简单,当发生内存越界等异常情况后,极有可能造成极大的破坏。以前述指针变量释放内存为例,当发生内存越界后,指针变量的值有可能已经被修改,申请的内存块也有可能已经被修改和破坏,而现有技术的分块内存释放方法是无法获知这些信息的,通过判断指针不为空的方式直接释放该指针所指向的内存,极有可能破坏其他的系统数据,对系统带来极大的风险,导致灾难性的后果。
发明内容
本发明提出一种新的分块内存申请和释放方法,能在很大程度上保证在没有发生内存越界等异常情况的前提下正确释放分块内存,克服现有技术简单的内存释放给系统带来严重的后果等缺点,对系统起到保护作用。另外,在发生内存越界等异常情况时,还可以根据需要进行断言(简称为assert)等相应的处理。
本发明内存申请和释放方法将内存块定义为包括头部扩展区和消息区的结构,根据所需内存存储量的大小选择申请内存的方式,并根据申请内存的方式选择释放内存的方式。
本发明内存申请和释放方法可根据需要设定内存块头部扩展区的内容和长度,内存块头部扩展区存储内存块状态等信息,存储消息的消息区设置在头部扩展区后。
本发明内存申请和释放方法在所需内存的存储量小于或等于系统内存块最大存储量时,将分配内存块的头部扩展区中的内存块状态信息置成“已申请”,将消息区的起始地址返回给程序,否则,采用现有技术的MALLOC或其他方式申请。
本发明内存申请和释放方法在程序需要释放内存时,首先判断是否为采用现有技术的MALLOC或其他方式申请的内存,如是则采用现有技术的FREE或其他方式释放。否则,进一步判断该内存块头部扩展区中的内存块状态信息,如果是“已申请”则正常释放该内存并将头部扩展区中的内存块状态信息置成“已释放”,否则,根据需要进行相应处理(如assert)。
本发明内存申请和释放方法包括以下步骤:
1、定义分块内存的内存块结构,包括头部扩展区和消息区,并根据需要设定头部扩展区的内容和长度,头部扩展区存储内存块状态等信息,存储消息的消息区设置在头部扩展区后;
2、当程序需要申请内存时,根据所需内存存储量的大小可采用两种方式进行申请:
方式1:所需内存的存储量小于或等于系统内存块最大存储量,将分配内存块的头部扩展区中的内存块状态信息置成“已申请”,将消息区的起始地址返回给程序;
方式2:所需内存的存储量大于系统内存块最大存储量,采用现有技术的MALLOC或其他方式申请;
3、当程序需要释放该内存时,根据不同的内存申请的方式采取相应的释放方式:
采用方式1申请的内存:判断该分块内存头部扩展区中的内存块状态信息,如果是“已申请”,表明该内存块没有被破坏或者被破坏的几率很小,可以正常释放该内存并将头部扩展区中的内存块状态信息置成“已释放”,否则,表明内存块已经被破坏,可以根据需要进行相应处理(如assert);
采用方式2申请的内存:采用现有技术的FREE或其他方式释放。
本发明内存申请和释放方法与现有技术相比,在分块内存中设置了内存块状态信息,在分块内存的申请和释放时,对该状态信息进行设置和判断,能很大程度上保证在没有发生内存越界等异常情况的前提下正确释放分块内存,对系统起到保护作用。另外,在发生内存越界等异常情况时,还可以根据需要进行assert处理,便于查找问题,非常利于程序调试。
附图说明
图1本发明内存申请和释放方法分块内存实施例的结构示意图;
图2本发明内存申请和释放方法分块内存的申请流程图;
图3本发明内存申请和释放方法分块内存的释放流程图。
下面结合附图及具体实施方式对本发明判断方法做详细的说明。
附图1是本发明内存申请和释放方法分块内存实施例的结构示意图。在此实施例中,内存块存储量占64字节为例,由头部扩展区和消息区组成,头部扩展区2字节存放内存块状态信息(取值详见表1),消息区62字节存放消息。显然,内存块存储量的大小和头部扩展区存储量的大小可以在具体使用中根据需要设置。
表1:头部扩展区2字节存放内存块状态信息
  内存块状态信息取值 意义
  0xAA55 “已申请”
  0x55AA “已释放”
  其他值 保留,用于扩展
附图2是本发明内存申请和释放方法分块内存的申请流程图。在此实施例中设定程序需要申请一块存储量大小为X(单位为字节,下同)的内存。具体包括以下步骤:
1、程序需要申请一块存储量大小为X的内存;
2、比较(X+2)与系统设置的最大内存块存储量的大小;
3、如果(X+2)小于或等于系统设置的最大内存块存储量,系统找到存储量合适的内存块,将内存块头部扩展区的内存块状态信息置成0xAA55,然后将消息区的起始地址传递给程序,此为方式1;否则,继续执行下一步骤;
4、通过现有技术的MALLOC或者其他方式申请存储量大小为X的内存,此为方式2。
附图3是本发明内存申请和释放方法分块内存的释放流程图。具体包括以下步骤:
1、程序需要释放该内存;
2、判断该内存在申请时采用何种方式;
3、如果是方式1,则进一步判断该内存块的头部扩展区中的内存块状态信息是否为0xAA55,否则执行步骤6;
4、如果该内存块的头部扩展区中的内存块状态信息是0xAA55,则释放该内存块,并将该内存块头部信息置成0x55AA,否则,执行下一步骤;
5、根据需要进行assert或者其他方式的处理;
6、通过现有技术的FREE或者其他方式释放。
本发明方法还可有其他多种实施例,在不背离本发明方法的精神及其实质的情况下,本领域技术人员当可相据本发明方法作出各种相应的改变或变形,但这些相应的改变或变形均属于本发明方法的权利要求保护范围。

Claims (5)

1、一种分块内存的申请和释放方法,其特征在于将内存块定义为包括头部扩展区和消息区的结构,根据所需内存存储量的大小选择申请内存的方式,并根据申请内存的方式选择释放内存的方式。
2、根据权利要求1所述分块内存申请和释放方法,其特征在于可根据需要设定内存块头部扩展区的内容和长度。
3、根据权利要求1所述分块内存申请和释放方法,其特征在于内存块头部扩展区存储内存块状态等信息,存储消息的消息区设置在内存块头部扩展区后。
4、根据权利要求1所述分块内存申请和释放方法,其特征在于当所需内存的存储量小于或等于系统内存块最大存储量时,将分配内存块的头部扩展区中的内存块状态信息置成“已申请”,将消息区的起始地址返回给程序,否则,采用现有技术的MALLOC或其他方式申请。
5、根据权利要求1所述分块内存申请和释放方法,其特征在于当程序需要释放内存时,如果该内存是以MALLOC或者其他方式申请的,则采用现有技术的FREE或者其他方式释放,否则,进一步判断该内存块头部扩展区中的内存块状态信息是否为“已申请”,是则正常释放该内存并将头部扩展区中的内存块状态信息置成“已释放”,否则根据需要进行相应处理(如assert)。
CN 200710078181 2007-02-07 2007-02-07 一种分块内存的申请和释放方法 Pending CN101013396A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN 200710078181 CN101013396A (zh) 2007-02-07 2007-02-07 一种分块内存的申请和释放方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN 200710078181 CN101013396A (zh) 2007-02-07 2007-02-07 一种分块内存的申请和释放方法

Publications (1)

Publication Number Publication Date
CN101013396A true CN101013396A (zh) 2007-08-08

Family

ID=38700928

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 200710078181 Pending CN101013396A (zh) 2007-02-07 2007-02-07 一种分块内存的申请和释放方法

Country Status (1)

Country Link
CN (1) CN101013396A (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102789407A (zh) * 2012-06-18 2012-11-21 上海斐讯数据通信技术有限公司 内存块有效性检测方法
CN102915276A (zh) * 2012-09-25 2013-02-06 武汉邮电科学研究院 一种用于嵌入式系统的内存控制方法
CN109753363A (zh) * 2019-01-31 2019-05-14 深兰科技(上海)有限公司 一种嵌入式系统内存管理方法及装置

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102789407A (zh) * 2012-06-18 2012-11-21 上海斐讯数据通信技术有限公司 内存块有效性检测方法
CN102789407B (zh) * 2012-06-18 2015-05-27 上海斐讯数据通信技术有限公司 内存块有效性检测方法
CN102915276A (zh) * 2012-09-25 2013-02-06 武汉邮电科学研究院 一种用于嵌入式系统的内存控制方法
CN102915276B (zh) * 2012-09-25 2015-06-03 武汉邮电科学研究院 一种用于嵌入式系统的内存控制方法
CN109753363A (zh) * 2019-01-31 2019-05-14 深兰科技(上海)有限公司 一种嵌入式系统内存管理方法及装置

Similar Documents

Publication Publication Date Title
CN1996258A (zh) 一种动态内存池的实现方法
CN101599046B (zh) 一种内存检测方法及装置
US7827375B2 (en) Defensive heap memory management
US6611898B1 (en) Object-oriented cache management system and method
US20040221120A1 (en) Defensive heap memory management
EP3504628B1 (en) Memory management method and device
US10949342B2 (en) Persistent memory garbage collection
CN101180612A (zh) 计算机系统、存储器管理方法及其程序
CN103412825B (zh) 一种内存释放方法及装置
CN103186469A (zh) 内存分配方法及装置、内存的回收方法
CN101859279A (zh) 一种内存分配、释放方法及装置
WO2001090899A3 (en) System and method for memory management using fixed-size blocks
US5963982A (en) Defragmentation of stored data without pointer indirection
US20090049271A1 (en) Consolidation of matching memory pages
CN104281528A (zh) 一种数据存储方法及装置
US11347698B2 (en) Garbage collection for hash-based data structures
CN105718319B (zh) 一种内存池版图解析方法和内存池装置
CN106528000A (zh) 一种数据存储装置及其读写性能优化方法、系统
CN101599080B (zh) 一种备份数据的组织系统和方法
CN101013396A (zh) 一种分块内存的申请和释放方法
CN102521143A (zh) 一种堆数据处理方法及装置
CN111666046B (zh) 一种数据存储方法、装置及设备
CN103617123A (zh) 一种通过内存块实现内存管理的方法及系统
CN107608885A (zh) 内存泄漏点的定位方法、装置、系统及可读存储介质
CN106155917A (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
ASS Succession or assignment of patent right

Owner name: CHONGQING CYIT COMMUNICATION TECHNOLOGY CO., LTD.

Free format text: FORMER OWNER: CHONGQING CHONGYOU XINKE (GROUP) CO., LTD.

Effective date: 20081017

C41 Transfer of patent application or patent right or utility model
TA01 Transfer of patent application right

Effective date of registration: 20081017

Address after: Huang Chongqing Nan'an District No. 1 Wu Fort Park Post encoding: 400065

Applicant after: Chongqing City Communication & Technology Co., Ltd.

Address before: B, 4 floor, zone 401147, Neptune science building, Chongqing, Yubei District

Applicant before: Chongqing cyit (Group) Limited by Share Ltd

C02 Deemed withdrawal of patent application after publication (patent law 2001)
WD01 Invention patent application deemed withdrawn after publication