CN103324579A - 一种内存管理方法 - Google Patents

一种内存管理方法 Download PDF

Info

Publication number
CN103324579A
CN103324579A CN2013102610394A CN201310261039A CN103324579A CN 103324579 A CN103324579 A CN 103324579A CN 2013102610394 A CN2013102610394 A CN 2013102610394A CN 201310261039 A CN201310261039 A CN 201310261039A CN 103324579 A CN103324579 A CN 103324579A
Authority
CN
China
Prior art keywords
memory
internal memory
rank
chained list
application
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
CN2013102610394A
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.)
SHENZHEN WDK TECHNOLOGY Co Ltd
Shanghai Feixun Data Communication Technology Co Ltd
Original Assignee
SHENZHEN WDK TECHNOLOGY Co Ltd
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 SHENZHEN WDK TECHNOLOGY Co Ltd, Shanghai Feixun Data Communication Technology Co Ltd filed Critical SHENZHEN WDK TECHNOLOGY Co Ltd
Priority to CN2013102610394A priority Critical patent/CN103324579A/zh
Publication of CN103324579A publication Critical patent/CN103324579A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Memory System (AREA)

Abstract

一种内存管理方法,包括:将内存划分为一阶以上的内存池和系统内存堆;申请内存时,根据申请内存大小确定出阶内存池,并根据阶内存池空闲链表为内存申请分配内存;释放内存时,根据需释放内存的内存链表,对内存进行释放。采用本发明的方法后,内存分为一阶以上内存池和系统内存堆两部分,内存申请时,在阶内存池没有空闲内存块时,不向高阶内存池申请,而是向系统内存堆申请,使用效率高。

Description

一种内存管理方法
技术领域
本发明涉及内存管理技术领域,特别是涉及一种内存管理方法。
背景技术
嵌入式系统的广泛应用,如何对嵌入式系统的内存进行高效管理已成为研发人员的研究热点。
在嵌入式系统中,内存使用存在申请频繁,使用内存块大小不均等问题,在系统长期运行后,会出现系统内存碎片化、内存申请释放效率低等问题,同时在内存操作出现异常时,极易导致系统崩溃。本发明通过对交换机等产品系统内存使用的情况分析,提出一种申请的方案,提高内存使用的效率,避免出现内存碎片化,并提供内存检查、统计分析。
发明内容
基于此,有必要提供一种内存使用效率高的内存管理方法。
一种内存管理方法,包括:
将内存划分为一阶以上的内存池和系统内存堆;
申请内存时,根据申请内存大小确定出阶内存池,并根据阶内存池空闲链表为内存申请分配内存;
释放内存时,根据需释放内存的内存链表,对内存进行释放。
在其中一个实施例中,所述申请内存时,根据申请内存大小确定出阶内存池,并根据内存池空闲链表为内存申请分配内存为:
根据申请内存大小确定出阶内存池;
若阶内存池空闲链表为空,则向系统内存堆申请,否则向阶内存池空闲链表申请。
在其中一个实施例中,若确定出的阶内存池大于最大阶内存池,则申请内存失败。
在其中一个实施例中,申请内存时,内存大小包括内存标识和实际使用两部分之和。
在其中一个实施例中,所述内存标识包括内存头、内存尾、前哨兵以及后哨兵。
在其中一个实施例中,所述释放内存时,根据需释放内存的内存链表,对内存进行释放为:
检查内存头是否被改写,若是,则终止释放;
检查前哨兵是否越界,若是,则终止释放;
检查内存尾是否被改写,若是,则终止释放;
检查后哨兵是否越界,若是,则终止释放。
在其中一个实施例中,还包括:
若内存是由阶内存池空闲链表申请的,则将内存从内存链表移出,移入阶内存次空闲链表。
在其中一个实施例中,还包括:
若内存是由系统内存堆申请的,则将内存从内存链表移出,移入阶内存次空闲链表或者释放回系统内存堆。
在其中一个实施例中,根据内存链表和阶内存池空闲链表监控内存使用情况。
采用本发明的方法后,内存分为一阶以上内存池和系统内存堆两部分,内存申请时,在阶内存池没有空闲内存块时,不向高阶内存池申请,而是向系统内存堆申请,使用效率高。
附图说明
图1为本发明一实施例提供的内存管理方法的流程图;
图2为图1中步骤200的具体方法流程图;
图3为图1中步骤300的具体方法流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更清楚明白,以下结合附图及实施例,对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
参阅图1,本发明提供的一个实施例的内存管理方法,包括:
步骤S100,将内存划分为一阶以上的内存池和系统内存堆;
将内存分为两部分,一部分划分为一阶以上的内存池,一部分为系统内存堆。内存申请时,在阶内存池没有空闲内存块时,向高阶内存池申请,造成内存的使用效率不高。分成两部分时,在阶内存池没有空闲内存块时,向系统内存堆申请,使用效率高。
步骤S200,申请内存时,根据申请内存大小确定出阶内存池,并根据阶内存池空闲链表为内存申请分配内存;
具体的,参阅图2,包括:
步骤S201,根据申请内存大小确定出阶内存池;
步骤S202,判断阶内存池空闲链表是否为空;
步骤S203,若阶内存池空闲链表为空,则向系统内存堆申请;
步骤S204,若阶内存池空闲链表不为空,则向阶内存池空闲链表申请。
当根据申请内存的大小确定出的阶内存池大于最高阶内次池,则申请内存失败。
步骤S300,释放内存时,根据需释放内存的内存链表,对内存进行释放。
申请内存时,内存大小包括内存标识和实际使用两部分,假设需要使用10M内存,申请时,还必须加上内存标识占的内存。内存标识包括内存头、内存尾、前哨兵以及后哨兵。
具体的,参阅图3,包括:
步骤S301,检查内存头是否被改写,若是跳到步骤S305;
步骤S302,检查前哨兵是否越界,若是跳到步骤S305;
步骤S303,检查内存尾是否被改写,若是跳到步骤S305;
步骤S304,检查后后哨兵是否越界,若是跳到步骤S305;
步骤S305,终止释放;
步骤S306,判断内存是否由阶内存池空闲链表申请;
步骤S307,若内存是否由阶内存池空闲链表申请,将内存从内存链表移出,移入阶内存池空闲链表。
步骤S308,若内存不是由阶内存池空闲链表申请,而是向系统内存堆申请的,则将内存从内存链表移出,移入阶内存池空闲链表或者释放回系统内存堆。
向系统内存堆申请的内存,有两个处理方法,一是从哪里申请的放回哪里,二是移入阶内存池,扩充阶内存的内存块。
步骤S301-步骤S304,检查内存头、内存尾、前哨兵以及后哨兵等内存标识,保证释放的内存不会使系统崩溃以及内存的有效性。
当然,内存管理方法还可以包括:根据内存链表和阶内存池空闲链表监控内存使用情况。遍历内存链表和阶内存池空闲链表,监控内存的使用情况。
采用本发明的方法后,内存分为一阶以上内存池和系统内存堆两部分,内存申请时,在阶内存池没有空闲内存块时,不向高阶内存池申请,而是向系统内存堆申请,使用效率高。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。

Claims (9)

1.一种内存管理方法,其特征在于,包括:
将内存划分为一阶以上的内存池和系统内存堆;
申请内存时,根据申请内存大小确定出阶内存池,并根据阶内存池空闲链表为内存申请分配内存;
释放内存时,根据需释放内存的内存链表,对内存进行释放。
2.根据权利要求1所述的内存管理方法,其特征在于,所述申请内存时,根据申请内存大小确定出阶内存池,并根据阶内存池空闲链表为内存申请分配内存为:
根据申请内存大小确定出阶内存池;
若阶内存池空闲链表为空,则向系统内存堆申请,否则向阶内存池空闲链表申请。
3.根据权利要求2所述的内存管理方法,其特征在于,若确定出的阶内存池大于最大阶内存池,则申请内存失败。
4.根据权利要求2所述的内存管理方法,其特征在于,申请内存时,内存大小包括内存标识和实际使用两部分之和。
5.根据权利要求4所述的内存管理方法,其特征在于,所述内存标识包括
内存头、内存尾、前哨兵以及后哨兵。
6.根据权利要求5所述的内存管理方法,其特征在于,所述释放内存时,根据需释放内存的内存链表,对内存进行释放为:
检查内存头是否被改写,若是,则终止释放;
检查前哨兵是否越界,若是,则终止释放;
检查内存尾是否被改写,若是,则终止释放;
检查后哨兵是否越界,若是,则终止释放。
7.根据权利要求6所述的内存管理方法,其特征在于,还包括:
若内存是由阶内存池空闲链表申请的,则将内存从内存链表移出,移入阶内存次空闲链表。
8.根据权利要求6所述的内存管理方法,其特征在于,还包括:
若内存是由系统内存堆申请的,则将内存从内存链表移出,移入阶内存次空闲链表或者释放回系统内存堆。
9.根据权利要求1所述的内存管理方法,其特征在于,还包括:
根据内存链表和阶内存池空闲链表监控内存使用情况。
CN2013102610394A 2013-06-27 2013-06-27 一种内存管理方法 Pending CN103324579A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2013102610394A CN103324579A (zh) 2013-06-27 2013-06-27 一种内存管理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2013102610394A CN103324579A (zh) 2013-06-27 2013-06-27 一种内存管理方法

Publications (1)

Publication Number Publication Date
CN103324579A true CN103324579A (zh) 2013-09-25

Family

ID=49193338

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2013102610394A Pending CN103324579A (zh) 2013-06-27 2013-06-27 一种内存管理方法

Country Status (1)

Country Link
CN (1) CN103324579A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105183542A (zh) * 2015-08-13 2015-12-23 上海斐讯数据通信技术有限公司 一种内存管理方法及系统
CN106155917A (zh) * 2015-04-28 2016-11-23 北京信威通信技术股份有限公司 内存管理方法及装置

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5978893A (en) * 1996-06-19 1999-11-02 Apple Computer, Inc. Method and system for memory management
CN1635428A (zh) * 2004-12-29 2005-07-06 任炼 指针式天时计时钟
CN101266575A (zh) * 2007-03-13 2008-09-17 中兴通讯股份有限公司 一种提高内存池利用率的方法
CN101984417A (zh) * 2010-11-01 2011-03-09 中兴通讯股份有限公司 内存管理方法及装置
CN102298677A (zh) * 2011-08-29 2011-12-28 瑞斯康达科技发展股份有限公司 一种堆栈溢出的保护方法和装置
CN103077126A (zh) * 2012-12-24 2013-05-01 中兴通讯股份有限公司 一种内存管理方法和装置

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5978893A (en) * 1996-06-19 1999-11-02 Apple Computer, Inc. Method and system for memory management
CN1635428A (zh) * 2004-12-29 2005-07-06 任炼 指针式天时计时钟
CN101266575A (zh) * 2007-03-13 2008-09-17 中兴通讯股份有限公司 一种提高内存池利用率的方法
CN101984417A (zh) * 2010-11-01 2011-03-09 中兴通讯股份有限公司 内存管理方法及装置
CN102298677A (zh) * 2011-08-29 2011-12-28 瑞斯康达科技发展股份有限公司 一种堆栈溢出的保护方法和装置
CN103077126A (zh) * 2012-12-24 2013-05-01 中兴通讯股份有限公司 一种内存管理方法和装置

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106155917A (zh) * 2015-04-28 2016-11-23 北京信威通信技术股份有限公司 内存管理方法及装置
CN105183542A (zh) * 2015-08-13 2015-12-23 上海斐讯数据通信技术有限公司 一种内存管理方法及系统
CN105183542B (zh) * 2015-08-13 2019-07-12 上海斐讯数据通信技术有限公司 一种内存管理方法及系统

Similar Documents

Publication Publication Date Title
CN107003809B (zh) 一种存储设备存储数据的方法及存储设备
CN101266575B (zh) 一种提高内存池利用率的方法
CN1996258A (zh) 一种动态内存池的实现方法
CN101702138B (zh) 一种内存管理方法、系统及服务器
CN108038002A (zh) 一种嵌入式软件内存管理方法
CN102662850B (zh) 一种内存管理方法及其系统
CN101493787A (zh) 一种内存操作的管理方法及系统
CN102063385A (zh) 一种内存管理方法和系统
CN102456048A (zh) 海量数据处理方法及系统
CN102841851A (zh) 闪存管理方法和闪存设备
CN103984599B (zh) 一种提高操作系统大页使用率的方法
CN102799471A (zh) 操作系统的进程回收方法及系统
WO2013189442A3 (zh) 一种内存管理方法和装置
CN104008111A (zh) 一种数据的存储管理方法及装置
CN107682206A (zh) 基于微服务的业务流程管理系统的部署方法及系统
CN103324579A (zh) 一种内存管理方法
CN104881324A (zh) 一种多线程下的内存管理方法
CN104317734A (zh) 一种适用于slab的内存分配方法及装置
CN103218305A (zh) 存储空间的分配方法
CN1770125A (zh) 一种分配内存的方法
CN105740161A (zh) 数据储存装置以及快闪存储器控制方法
CN102521143A (zh) 一种堆数据处理方法及装置
CN1851676A (zh) 一种嵌入式系统缓冲式内存分配方法
CN103823766B (zh) Flash存储器的高效率存储方法
CN106598736A (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
RJ01 Rejection of invention patent application after publication

Application publication date: 20130925

RJ01 Rejection of invention patent application after publication