CN103324579A - 一种内存管理方法 - Google Patents
一种内存管理方法 Download PDFInfo
- 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
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所述的内存管理方法,其特征在于,还包括:
根据内存链表和阶内存池空闲链表监控内存使用情况。
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)
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)
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 | 中兴通讯股份有限公司 | 一种内存管理方法和装置 |
-
2013
- 2013-06-27 CN CN2013102610394A patent/CN103324579A/zh active Pending
Patent Citations (6)
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)
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 |
---|---|---|
CN102156675B (zh) | 一种内存分配方法及装置 | |
CN101702138B (zh) | 一种内存管理方法、系统及服务器 | |
CN101266575B (zh) | 一种提高内存池利用率的方法 | |
CN1996258A (zh) | 一种动态内存池的实现方法 | |
CN102662850B (zh) | 一种内存管理方法及其系统 | |
CN101859279A (zh) | 一种内存分配、释放方法及装置 | |
CN102063385A (zh) | 一种内存管理方法和系统 | |
CN102456048A (zh) | 海量数据处理方法及系统 | |
CN102841851A (zh) | 闪存管理方法和闪存设备 | |
CN102306126A (zh) | 内存管理方法、装置和系统 | |
CN102799471A (zh) | 操作系统的进程回收方法及系统 | |
CN104008111A (zh) | 一种数据的存储管理方法及装置 | |
WO2013189442A3 (zh) | 一种内存管理方法和装置 | |
CN106062708A (zh) | 在具有地址空间布局随机化的系统中的二进制转化重用 | |
CN103810072A (zh) | 保障多线程任务有序执行的装置及方法 | |
CN102520887A (zh) | 一种应用于云计算的存储空间配置与管理方法 | |
CN103324579A (zh) | 一种内存管理方法 | |
CN1770125A (zh) | 一种分配内存的方法 | |
CN104182356B (zh) | 一种内存管理方法、装置及终端设备 | |
CN103218305A (zh) | 存储空间的分配方法 | |
CN103116475A (zh) | 一种自动精简配置扩容的方法 | |
CN1851676A (zh) | 一种嵌入式系统缓冲式内存分配方法 | |
CN106598736A (zh) | 一种内存池的内存块调用方法和释放方法及服务器 | |
CN103823640A (zh) | 一种Flash存储器的高效率存储方法 | |
CN106855788A (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 |