CN1276361C - 一种嵌入式系统内存管理的方法 - Google Patents
一种嵌入式系统内存管理的方法 Download PDFInfo
- Publication number
- CN1276361C CN1276361C CN 200310110344 CN200310110344A CN1276361C CN 1276361 C CN1276361 C CN 1276361C CN 200310110344 CN200310110344 CN 200310110344 CN 200310110344 A CN200310110344 A CN 200310110344A CN 1276361 C CN1276361 C CN 1276361C
- Authority
- CN
- China
- Prior art keywords
- memory
- pool
- user
- embedded system
- internal memory
- 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
Images
Landscapes
- Memory System (AREA)
Abstract
本发明公开了一种嵌入式系统内存管理的方法,包括如下步骤:嵌入式系统的内存管理模块,从内存中划分出一个区域作为内存池;当用户申请的内存大于设定的阈值时,则为大内存申请,则内存管理模块就向系统申请为用户在内存池以外的区域分配一块内存,用完后,释放该内存;否则,为小内存申请,内存管理模块就在内存池中为用户分配一块内存,用完后,归还内存池。本发明所述的针对嵌入式系统的内存管理方法,通过将小内存集中于内存池中分配,大内存单独申请,有效减少由于大量小内存分配而产生的内存碎片。
Description
技术领域
本发明涉及一种内存的管理方法,尤其是一种应用于数字电视机顶盒、PDA等嵌入式系统的内存管理方法。
背景技术
嵌入式系统的应用非常广泛。由于嵌入式系统资源的限制,并且内存的使用频率很高,所以如何高效的使用内存成为人们非常关心的一个问题。这就使嵌入式系统内存管理的方法显得十分重要。
目前,在嵌入式系统中,主要采用两种内存分配方法,一种是固定长度的内存分配策略,另一种是可变长度的内存分配策略。
对于可变长度的内存分配策略,该方法将空闲的内存块以链表的形式排列,当用户申请大小为size的内存时,就从链表的头部开始搜索空闲内存块,若空闲内存块小于size,则继续搜索,直到找到足够大小的空闲内存块,分配给用户。用户释放内存时,就将释放的内存块放在链表的尾部。
这种内存分配策略有明显的缺点。由于在嵌入式系统中,内存的分配与释放非常频繁,而且存在大量小内存的分配。使用这种内存管理方法,经过一段时间的运行后,小块内存将会散布在整个内存,必然产生大量的内存碎片。这时,虽然系统还有很多剩余内存,用户却申请不到内存,造成大量的内存浪费,甚至导致系统崩溃。
第二种是固定长度的内存分配策略。该方法是先把内存划分为几个区,每个区又划分为大小相等的内存块。例如,第一个内存区每个内存块为16字节,第二个内存区每个内存块为32字节,第三个内存区每个内存块为64字节,等等。当用户申请大小为size的内存时,扫描各个内存区,找到不小于size的最小的内存块所在的区,从该区中取出一个内存块分配给用户。用户释放内存时,再将该内存块归还其所在的区。
这种方法的缺点是,如果满足条件的内存区的内存块已经用完,则内存申请失败。即使其它区还有更大的内存块,也不会分配给用户。这样,使得内存不能得到充分利用,造成大量浪费。
发明内容
本发明所要解决的技术问题在于:提出一种嵌入式系统的内存管理方法,可以充分的利用系统的内存资源,减少系统由于内存而引起的系统崩溃。
一种嵌入式系统内存管理的方法,包括如下步骤:
步骤一、嵌入式系统的内存管理模块,从内存中划分出一个区域作为内存池;
步骤二、当用户申请的内存大于设定的阈值时,则为大内存申请,执行步骤三;否则,为小内存申请,执行步骤四;
步骤三、用户申请的是大内存,内存管理模块就向系统申请为用户在内存池以外的区域分配一块内存,用完后,释放该内存;
步骤四、用户申请的是小内存,内存管理模块就在内存池中为用户分配一块内存,用完后,归还内存池。
本发明所述的针对嵌入式系统的内存管理方法,通过将小内存集中于内存池中分配,大内存单独申请,有效减少由于大量小内存分配而产生的内存碎片;通过内存分配服务线程使得对公共内存的数据保护和管理得以实现。
附图说明
图1是本发明方法的流程示意图;
图2是本发明小内存分配的流程示意图;
图3是本发明内存池结构的示意图。
具体实施方式
在嵌入式系统(如数字电视机顶盒或PDA或手机等系统)中,内存的使用频率非常高,大量的小内存分配会造成内存产生很多碎片。本发明的内存分配策略是将小内存分配集中在内存的某一区域(内存池),避免使小块内存散布在整个内存中,这样可以有效的减少内存碎片的产生。如图1所示,具体方法如下:
步骤一、嵌入式系统的内存管理模块,从内存中划分出一个区域作为内存池;
步骤二、当用户申请的内存大于设定的阈值时,则为大内存申请,执行步骤三;否则,为小内存申请,执行步骤四;
步骤三、用户申请的是大内存,内存管理模块就向系统申请为用户在内存池以外的区域分配一块内存,用完后,释放该内存;
步骤四、用户申请的是小内存,内存管理模块就在内存池中为用户分配一块内存,用完后,归还内存池。
当用户申请大小为size的内存时,内存管理模块根据size的大小不同,以一定的阈值作为界定标准,分为大内存申请和小内存申请来分别处理。size大于阈值的作为大内存来处理,小于阈值的作为小内存来处理。
阈值的大小根据嵌入式系统的不同和应用的场合不同而可以有不同的设定,根据具体小内存申请的情况,取值范围一般为32——256之间,一般为2n字节,比如,对于数字电视机顶盒可以为256字节,对于手机可以为128字节。
内存池的大小根据阈值的大小、用户申请小内存的数量和系统内存总量设定,发明所述的内存池的大小为2——16K字节,如对于数字电视机顶盒可以取8K字节。
当用户申请的是大内存时,内存管理模块就向系统申请为用户在内存池以外的区域分配一块内存,内存用完后直接释放。由于所有的大内存的申请全部集中在内存池外,这样既有利于成功的分配,又可以避免大量的小内存申请而产生碎片,提高了内存的利用效率。
如果仅将小内存的分配集中在内存池中,仍采用原有的内存管理方法来管理,虽然可以起到一定的效果,但是并不能充分利用内存池的资源。因此,本发明中内存管理模块可以用一个内存管理链表来管理这个内存池。
如图2所示,在内存池中,每一段已分配的内存或空闲内存的前8个字节作为内存管理链表的一个节点。该节点记录了这段内存的状态STATE(已分配或空闲)、大小SIZE、这段内存所在的内存池的编号、下一节点的地址等信息。图2中A表示内存管理列表的节点,B表示用户实际占用的内存,图中的箭头表示NEXT中存储的是下一节点的地址信息。
通过以上的内存管理链表可以方便的监视内存的使用情况,完成内存的分配和回收。
如图3所示是本发明小内存分配的流程示意图,在内存池中分配时,内存管理模块将从第一个内存池开始逐个检查。找到有空闲空间的内存池后,内存管理模块在该内存池范围内搜索内存管理链表,检查是否有满足需求空闲空间。如果有,则分配给用户,如果没有,则继续检查下一个内存池。如果当前所有的内存池都没有满足需求空闲空间,内存管理模块将向系统申请增加一个内存池,如果申请成功,则在新内存池中为用户分配内存,如果申请失败,则返回内存分配失败信息。
具体包括如下步骤:
步骤40、内存管理模块将从第一个内存池开始;
步骤41、判断该内存池中是否存在空闲内存空间;如果存在,则执行步骤42;否则执行步骤43;
步骤42、在该内存池中搜索内存管理链表,根据链表判断是否存在满足需求的内存空间,如果存在,则将内存分配给用户,将剩余的内存添加到链表中,结束分配过程;否则执行步骤43;
步骤43、判断该内存池是否为最后一个内存池,如果不是,则检查下一个内存池,执行步骤41;如果是,则执行步骤44;
步骤44、向系统申请,增加一个新的内存池;如果成功,则在新的内存池中,将内存分配给用户,将剩余的内存添加到链表中,结束分配过程;否则,提示用户内存分配失败,结束分配过程。
对于每一个内存池都按其建立的顺序,分配一个数字来区分不同的内存池,比如,最先建立的内存池的标号为1;第二个建立的内存池标号为2,依次类推。所述的步骤40和步骤43的循环就是遍历所有的内存池一次,判断是否是所有的内存池都已满或都不存在满足需求的空闲内存,作为是否建立新的内存池的条件。
如果内存池中存在的空闲空间与用户请求的内存空间相同,则直接将该内存分配给用户,并修改链表中对应节点的状态。
如果内存池中存在的空闲空间大于用户请求的内存,则分配给用户其所请求的大小的内存空间,同时更改内存管理链表中该段空闲内存的表项,状态改为已占用,大小改为用户请求的大小,NEXT指向剩余的内存空间;增加一个剩余的内存空间的表项,状态为未占用,大小为剩余的可用空间大小,NEXT指向原该段空闲内存NEXT的指向的地址。
为了避免不必要的内存管理链表的反复更改,如果空闲的内存空间比用户请求的空间大16个字节以内,则直接将该段内存分配给用户使用,不在将剩余的内存加入到链表中,以此来提高小内存处理的效率。
用户释放内存时,内存管理模块根据用户释放的内存空间地址,在内存管理链表中找到相应的节点,修改该节点的记录信息,将这段内存标记为空闲,并检查内存池中与其相邻的内存空间。如果与其相邻的内存空间为空闲空间,并且与要释放的内存空间在同一个内存池中,则合并它们,以满足以后的内存分配的需要。然后检查这个内存池,如果该内存池已经全部被释放,则将该内存池占用的内存空间归还系统。
具体包括如下步骤:
步骤45、内存管理模块根据用户释放的内存空间地址,在内存管理链表中找到相应的节点;
步骤46、判断与待回收的内存空间相邻的内存空间是否为空闲空间;如果是,则执行步骤47;否则,修改该节点的记录信息,将这段内存标记为空闲,执行步骤48;
步骤47、将待回收的内存空间与相邻的空闲内存空间合并,重新建立新的链表单元,状态为空闲,大小为合并后的空闲空间,NEXT指向整个空闲空间接下来的内存地址;
步骤48、判断是否内存池中所有的内存空间均为空闲,如果是,则释放该内存池;否则结束释放过程。
最后所应说明的是:以上实施例仅用以说明而非限制本发明的技术方案,尽管参照上述实施例对本发明进行了详细说明,本领域的普通技术人员应当理解:依然可以对本发明进行修改或者等同替换,而不脱离本发明的精神和范围的任何修改或局部替换,其均应涵盖在本发明的权利要求范围当中。
Claims (8)
1、一种嵌入式系统内存管理的方法,其特征在于:包括如下步骤:
步骤一、嵌入式系统的内存管理模块,从内存中划分出一个区域作为内存池;
步骤二、当用户申请的内存大于设定的阈值时,则为大内存申请,执行步骤三;否则,为小内存申请,执行步骤四;
步骤三、用户申请的是大内存,内存管理模块就向系统申请为用户在内存池以外的区域分配一块内存,用完后,释放该内存;
步骤四、用户申请的是小内存,内存管理模块就在内存池中为用户分配一块内存,用完后,归还内存池。
2、根据权利要求1所述的嵌入式系统内存管理的方法,其特征在于:阈值的大小根据嵌入式系统的不同和应用的场合不同而可以有不同的设定,取值范围一般为32--256字节间。
3、根据权利要求1所述的嵌入式系统内存管理的方法,其特征在于:所述的内存池的大小为2--16K字节。
4、根据权利要求3所述的嵌入式系统内存管理的方法,其特征在于:所述的所有的内存池大小相同。
5、根据权利要求1所述的嵌入式系统内存管理的方法,其特征在于:所述的内存池通过一个内存管理链表来管理,
在内存池中,每一段已分配的内存或空闲内存的前8个字节作为内存管理链表的一个节点,
该节点的信息至少包括:该段内存的状态STATE、大小SIZE和下一节点的地址信息。
6、根据权利要求5所述的嵌入式系统内存管理的方法,其特征在于:所述的步骤四,包括如下步骤:
步骤40、内存管理模块将从第一个内存池开始;
步骤41、判断该内存池中是否存在空闲内存空间;如果存在,则执行步骤42;否则执行步骤43;
步骤42、在该内存池中搜索内存管理链表,根据链表判断是否存在满足需求的内存空间,如果存在,则将内存分配给用户,将剩余的内存添加到链表中,结束分配过程;否则执行步骤43;
步骤43、判断该内存池是否为最后一个内存池,如果不是,则检查下一个内存池,执行步骤41;如果是,则执行步骤44;
步骤44、向系统申请,增加一个新的内存池;如果成功,则在新的内存池中,将内存分配给用户,将剩余的内存添加到链表中,结束分配过程;否则,提示用户内存分配失败,结束分配过程。
7、根据权利要求6所述的嵌入式系统内存管理的方法,其特征在于:所述的步骤42中,如果空闲的内存空间比用户请求的空间大16个字节以内,则直接将该段内存分配给用户使用。
8、根据权利要求5所述的嵌入式系统内存管理的方法,其特征在于:所述的步骤四中,回收内存包括:
步骤45、内存管理模块根据用户释放的内存空间地址,在内存管理链表中找到相应的节点;
步骤46、判断与待回收的内存空间相邻的内存空间是否为空闲空间;如果是,则执行步骤47;否则,修改该节点的记录信息,将这段内存标记为空闲,执行步骤48;
步骤47、将待回收的内存空间与相邻的空闲内存空间合并,重新建立新的链表单元,状态为空闲,大小为合并后的空闲空间,下一节点的地址为整个空闲空间接下来的内存地址;
步骤48、判断是否内存池中所有的内存空间均为空闲,如果是,则释放该内存池;否则结束释放过程。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200310110344 CN1276361C (zh) | 2003-12-29 | 2003-12-29 | 一种嵌入式系统内存管理的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200310110344 CN1276361C (zh) | 2003-12-29 | 2003-12-29 | 一种嵌入式系统内存管理的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1635482A CN1635482A (zh) | 2005-07-06 |
CN1276361C true CN1276361C (zh) | 2006-09-20 |
Family
ID=34843204
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 200310110344 Expired - Fee Related CN1276361C (zh) | 2003-12-29 | 2003-12-29 | 一种嵌入式系统内存管理的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN1276361C (zh) |
Families Citing this family (40)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5008936B2 (ja) * | 2006-09-28 | 2012-08-22 | 京セラドキュメントソリューションズ株式会社 | メモリ管理装置およびメモリ管理方法 |
CN101241492B (zh) * | 2007-02-06 | 2011-05-11 | 中兴通讯股份有限公司 | 具有容量动态控制功能的内存数据存储装置及其实现方法 |
CN101382916B (zh) * | 2007-09-06 | 2010-12-08 | 大唐移动通信设备有限公司 | 嵌入式系统内存管理的方法 |
CN101714165B (zh) * | 2009-12-08 | 2011-08-17 | 青岛海信宽带多媒体技术有限公司 | 一种数据导入的方法 |
CN101833512A (zh) * | 2010-04-22 | 2010-09-15 | 中兴通讯股份有限公司 | 一种内存回收方法及其装置 |
CN101950272B (zh) * | 2010-09-10 | 2012-08-29 | 北京捷通华声语音技术有限公司 | 一种嵌入式系统中内存管理的方法和装置 |
CN101950273B (zh) * | 2010-09-26 | 2012-05-23 | 中国人民解放军海军工程大学 | 一种dsp数据区动态管理方法 |
CN102436421B (zh) * | 2010-09-29 | 2015-12-16 | 腾讯科技(深圳)有限公司 | 缓存数据的方法 |
CN102455976B (zh) * | 2010-11-02 | 2015-09-23 | 上海宝信软件股份有限公司 | 一种中间件内存管理的方法 |
CN102024034B (zh) * | 2010-11-26 | 2012-05-30 | 中国科学院声学研究所 | 一种面向高清媒体的嵌入式文件系统的碎片处理方法 |
CN102331920B (zh) * | 2011-07-26 | 2015-04-08 | 深圳万兴信息科技股份有限公司 | 一种数据处理方法及装置 |
CN102262597B (zh) * | 2011-08-05 | 2014-01-08 | 浪潮(北京)电子信息产业有限公司 | 内存池管理方法和系统 |
CN102279804A (zh) * | 2011-08-16 | 2011-12-14 | 天津市天祥世联网络科技有限公司 | 视频监控平台系统的内存池结构及实现方法 |
CN102279808A (zh) * | 2011-09-06 | 2011-12-14 | 晨星软件研发(深圳)有限公司 | 一种嵌入式设备图像内存管理方法及装置 |
CN102984580B (zh) * | 2012-11-12 | 2016-04-20 | 北京奇虎科技有限公司 | 内存清理方法及系统 |
CN103024538A (zh) * | 2012-11-12 | 2013-04-03 | 北京奇虎科技有限公司 | 内存管理方法及系统 |
CN103888827A (zh) * | 2012-12-20 | 2014-06-25 | 中山大学深圳研究院 | 一种基于嵌入式内核的数字电视应用管理层系统及方法 |
CN103077126B (zh) * | 2012-12-24 | 2016-08-03 | 中兴通讯股份有限公司 | 一种内存管理方法和装置 |
CN103488576B (zh) * | 2013-09-18 | 2016-09-07 | 珠海金山网络游戏科技有限公司 | 一种高性能小区块内存管理方法 |
CN103744736B (zh) * | 2014-01-09 | 2018-10-02 | 深圳Tcl新技术有限公司 | 内存管理的方法及Linux终端 |
CN103885569B (zh) * | 2014-04-11 | 2017-05-24 | 珠海全志科技股份有限公司 | 内存的管理方法及装置 |
CN104090848B (zh) * | 2014-07-16 | 2017-03-08 | 云南大学 | 一种周期性大数据处理的内存管理方法及装置 |
CN105589809A (zh) * | 2014-10-24 | 2016-05-18 | 中国科学院深圳先进技术研究院 | 一种内存管理方法及装置 |
CN104850505B (zh) * | 2015-05-26 | 2017-08-25 | 左应鹏 | 基于链式堆叠的内存管理方法与系统 |
CN105138289A (zh) * | 2015-08-20 | 2015-12-09 | 上海联影医疗科技有限公司 | 计算组件的存储管理方法和装置 |
CN105528304B (zh) * | 2015-12-03 | 2019-04-16 | 盛趣信息技术(上海)有限公司 | 内存池管理方法 |
CN107153618A (zh) * | 2016-03-02 | 2017-09-12 | 阿里巴巴集团控股有限公司 | 一种内存分配的处理方法及装置 |
CN107168804A (zh) * | 2017-05-31 | 2017-09-15 | 上海联影医疗科技有限公司 | 一种内存资源管理方法与系统 |
CN108121603B (zh) * | 2017-12-20 | 2021-11-02 | 安徽皖通邮电股份有限公司 | 一种嵌入式系统内存管理方法 |
CN108958911B (zh) * | 2018-05-30 | 2022-02-08 | 北京小米移动软件有限公司 | 进程的控制方法及装置 |
CN110245091B (zh) * | 2018-10-29 | 2022-08-26 | 浙江大华技术股份有限公司 | 一种内存管理的方法、装置及计算机存储介质 |
CN109857678A (zh) * | 2019-01-31 | 2019-06-07 | 深兰科技(上海)有限公司 | 一种嵌入式系统内存管理方法及装置 |
CN110163731B (zh) * | 2019-04-30 | 2021-07-27 | 广州市中智软件开发有限公司 | 中介服务超市的虚拟竞价室的建立方法、系统及存储介质 |
CN111338981B (zh) * | 2020-02-21 | 2022-11-08 | 深圳震有科技股份有限公司 | 一种内存防碎片方法、系统及储存介质 |
CN111679909B (zh) * | 2020-05-19 | 2024-02-23 | 深圳市元征科技股份有限公司 | 数据处理方法、装置及终端设备 |
CN113391922A (zh) * | 2021-06-16 | 2021-09-14 | 天津津航计算技术研究所 | 一种嵌入式软件内存申请和释放方法 |
CN115391032A (zh) * | 2022-08-15 | 2022-11-25 | 上海慧程工程技术服务有限公司 | 一种用于工业物联网边缘设备的内存优化方法 |
CN116360788A (zh) * | 2023-02-17 | 2023-06-30 | 深圳市亿维自动化技术有限公司 | 结构化文本编程语言的编译方法、编译器及电子设备 |
CN117032995A (zh) * | 2023-10-08 | 2023-11-10 | 苏州元脑智能科技有限公司 | 内存池管理方法、装置、计算机设备和存储介质 |
CN117435352B (zh) * | 2023-12-20 | 2024-03-29 | 北京遥感设备研究所 | 一种定长变长数据混合管理的轻量化内存优化分配方法 |
-
2003
- 2003-12-29 CN CN 200310110344 patent/CN1276361C/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
CN1635482A (zh) | 2005-07-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1276361C (zh) | 一种嵌入式系统内存管理的方法 | |
CN1292370C (zh) | 从源系统复制信息到目标系统的方法 | |
CN108038002B (zh) | 一种嵌入式软件内存管理方法 | |
CN108132842B (zh) | 一种嵌入式软件内存管理系统 | |
US6862674B2 (en) | Methods and apparatus for performing a memory management technique | |
CN101221536B (zh) | 嵌入式系统的内存管理方法及装置 | |
CN1711766A (zh) | 电子文档版本化方法和使用基于可扩展标识语言的版本号的更新文档提供方法 | |
CN1271524C (zh) | 一种静态内存管理方法 | |
US20190220391A1 (en) | Memory management method and device | |
CN101382916B (zh) | 嵌入式系统内存管理的方法 | |
CN1317653C (zh) | 一种数据库连接的高效管理方法 | |
US6643753B2 (en) | Methods and systems for managing heap creation and allocation | |
CN1722106A (zh) | 一种嵌入式实时操作系统中内存分配的方法 | |
CN1928873A (zh) | 一种实现负荷分担的数据库访问方法及系统 | |
CN1303534C (zh) | 一种内存池管理的方法 | |
CN1687904A (zh) | 智能卡存储环境的控制方法 | |
CN103455433A (zh) | 内存管理方法及系统 | |
CN102455976A (zh) | 一种中间件内存管理方案 | |
US20050154851A1 (en) | Fast, high reliability dynamic memory manager | |
CN1851676A (zh) | 一种嵌入式系统缓冲式内存分配方法 | |
CN1851671A (zh) | 一种节省全局变量内存空间的方法 | |
EP0844564A2 (en) | Memory manager system | |
CN1991778A (zh) | 快照扩容系统及方法 | |
CN1881895A (zh) | 一种网络管理系统中的设备操作方法 | |
CN111338981B (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 | ||
C19 | Lapse of patent right due to non-payment of the annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |