CN1271524C - 一种静态内存管理方法 - Google Patents
一种静态内存管理方法 Download PDFInfo
- Publication number
- CN1271524C CN1271524C CNB031158749A CN03115874A CN1271524C CN 1271524 C CN1271524 C CN 1271524C CN B031158749 A CNB031158749 A CN B031158749A CN 03115874 A CN03115874 A CN 03115874A CN 1271524 C CN1271524 C CN 1271524C
- Authority
- CN
- China
- Prior art keywords
- internal
- memory
- storage area
- address
- fragmentation
- 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
Landscapes
- Memory System Of A Hierarchy Structure (AREA)
Abstract
一种静态内存管理方法,将内存的某一连续存储区域预先分配给一组程序和/或数据专门使用,该存储区域包含若干大小相等的内存分片,并在内存中保存涉及该存储区域配置和状态的相关信息,当该组内有程序和/或数据欲使用内存时,执行以下步骤:(1a)根据该存储区域的相关信息获取相应数量处于空闲状态的内存分片的地址并将这些内存分片置于使用状态;(1b)根据步骤(1a)获取的内存分片地址,将对应的存储空间分配给欲使用内存的程序和/或数据,当该组内程序和/或数据结束内存使用时,执行以下步骤:(2a)释放结束使用的内存分片的存储空间;(2b)根据该存储区域的相关信息确定结束使用的内存分片的地址并将这些内存分片置于空闲状态。
Description
技术领域
本发明涉及计算机内存管理方法,特别涉及一种对静态内存进行优化管理的方法。
背景技术
计算机系统由硬件和软件两大部分组成。硬件部分称为裸机,它包括主机和外部设备,而主机由中央处理器(CPU)和内存组成,其中CPU负责运算和对其它部件进行控制;内存用来存储程序和数据。软件部分包括系统软件和应用软件,其中作为系统软件的操作系统对计算机系统的所有资源进行控制和管理,使它们得到合理和充分的利用。内存管理在操作系统中占有关键的地位,其管理功能主要包括内存分配和回收、逻辑地址与物理地址的转换、存储保护以及内存扩充等,其中内存的跟踪、回收、调试和碎片整理等处理一直是内存管理的重点和难点,也是影响整个系统稳定和效率的关键,这就要求使用的操作系统(或虚拟操作系统)能够提供高效、稳定的内存管理方法。
在一种已有的内存管理方案中,将内存块分为两类并利用两个链表分别进行管理,其中一个链表为空闲内存链表,用于链接空闲的内存块;另一个为使用链表,用于链接正在使用的内存块。各内存块的大小是不规则的(即大小可能不等),当有内存使用申请时,操作系统根据申请的内存使用量,从空闲链表中选择合适的内存块放入使用链表以分配给申请方使用,当使用结束后,内存块被释放并被放入空闲链表,并判断该内存块是否可与空闲链表中的其它内存块整合成一块更大的内存块,如果可以,则进行碎片整理以整合形成更大的内存块。这种方法的优点是可以统一方式管理内存,缺点是在内存使用过程中容易出现大量的碎片,导致内存浪费,此外,碎片整理算法复杂和效率低下,从而影响系统的整体性能,最后,该方法仍然无法解决内存耗尽的问题(即,当一个任务或线程出现内存泄露时,它可能耗尽系统所有的内存资源,进而影响整个系统,甚至导致崩溃)。
发明内容
本发明的目的是提供一种静态内存管理方法,它可以克服内存碎片回收效率低下和内存泄漏等问题。
本发明的发明目的通过以下技术方案实现:
一种静态内存管理方法,其中,将内存的某一连续存储区域预先分配给一组程序和/或数据专门使用,该存储区域包含若干大小相等的内存分片,并在内存中保存涉及该存储区域配置和状态的相关信息,当该组内有程序和/或数据欲使用内存时,执行以下步骤:
(1a)根据该存储区域的相关信息获取相应数量处于空闲状态的内存分片的地址并将这些内存分片置于使用状态;
(1b)根据步骤(1a)获取的内存分片地址,将对应的存储空间分配给欲使用内存的程序和/或数据,
当该组内程序和/或数据结束内存使用时,执行以下步骤:
(2a)释放结束使用的内存分片的存储空间;
(2b)根据该存储区域的相关信息确定结束使用的内存分片的地址并将这些内存分片置于空闲状态。
在上述静态内存管理方法中,比较好的是,每块所述内存分片两端设置标识其边界的标志字节。
在上述静态内存管理方法中,比较好的是,通过在内存中为该组程序和/或数据增设另一连续存储区域并保存涉及该增设存储区域配置和状态的相关信息来增加该组程序和/或数据所使用的内存。
在上述静态内存管理方法中,比较好的是,所述涉及该存储区域配置和状态的相关信息包括内存分片的大小、处于空闲状态和使用状态的内存分片数量和地址、该存储区域开始和结束地址以及该存储区域的大小。更好的是,在上述静态内存管理方法中,以链表方式记录处于空闲状态和使用状态的内存分片的地址,并通过链表操作获取内存分片地址和在空闲状态与使用状态之间切换内存分片的状态。
在上述静态内存管理方法,比较好的是,所述涉及该存储区域配置和状态的相关信息进一步包括增设存储区域的地址。
在本发明的静态内存管理方法中,由于为一组程序和/或数据分配专用的连续存储区域,因此在出现内存泄露时该组程序和/或数据仅将该区域中的内存耗尽,不会波及系统其它部分的运行。其次,由于存储区域是连续的,因此有利于提高内存管理速度和效率。最后,该连续存储区域包含若干大小相等的内存分片,程序和/数据以内存分片为单位使用该区域,因此不会出现内存碎片的问题,避免了内存碎片回收带来的额外开支,简化了内存分配算法,保证了系统的稳定和效率。
附图说明
图1为本发明一个较佳实施例的示意图。
具体实施方式
一般情况下,一组程序和/或数据对内存的使用时间和大小是动态和随机的,在上述现有技术的内存管理方案中,当需要使用时,系统根据使用内存的大小为之分配相应的内存,而当使用结束后则收回使用权并释放该内存空间。如上所述,这种动态内存管理容易引发内存耗尽、系统崩溃和管理复杂而低效等缺点。为此,本发明的基本思想是,预先在内存中为一组程序和/或数据分配一块连续存储区域(以下又称为静态内存池)供其专用,静态内存池包含若干大小相等的内存分片,并且以内存分片为单位,为需要使用静态内存池的程序和/或数据分配相应数量的内存,而在结束使用时又释放这些内存分片以供后续使用。
在内存分片的分配和释放过程中,将要利用静态内存池的配置和状态信息,例如内存分片的大小和总数以及处于空闲状态和使用状态的内存分片的地址等。对于本领域内技术人员来说,利用这些信息分配和释放内存分片的实现方式是公知的,并且与本发明方法的基本思想无关,因此具体的思想方式不应构成对本发明精神和范围的限定。此外,在本发明中,对这些信息的保存位置没有特别的限定,只要保证这些信息不丢失和损坏即可,因此它们既可以保存在静态内存池区域内,也可以保存在静态内存池以外的区域。
值得指出的是,这里所称的一组程序和/或数据的含义应该理解为若干程序的集合、若干程序与数据的集合以及若干数据的集合,虽然在相当多的情况下,一组程序和/数据可能隶属于整个系统内完成一定逻辑功能的模块实体,并且集合内程序之间、数据之间以及程序与数据之间存在执行逻辑上的关系,但是对于本发明的基本思想本身或者其实现而言,这种执行逻辑上的关系并非必需的,因此不应构成对本发明精神和范围的限定。
为了防止向一块内存分片写入程序或数据时越过其边界,可以在每块所述内存分片两端设置标识其边界的标志字节,当读取到标志字节时系统即判定写入操作已经到达内存分片的边界并停止对该内存分片的写入。此外,虽然静态内存池的内存分片大小在静态内存池创建时确定后即不能修改,但是可以通过在内存中增设另一连续存储区域并保存涉及该增设存储区域配置和状态的相关信息来增加该组程序和/或数据所使用的内存。
以下借助附图描述本发明方法的较佳实施例,在该较佳实施例中,使用该静态内存池的一组程序和/或数据隶属于一个模块,采用静态内存池控制块和内存分片描述块组来描述静态内存池的有关信息并通过改变这些相关信息实现内存分片的分配和释放等管理功能,其中控制块用来描述和记录静态内存池的当前状态,而内存分片描述块组用来描述内存分片的状态。
图1示出了控制块和内存分片描述块组的数据结构及其与内存分片的对应关系。如图1所示,静态内存池控制块包含如下的信息段:
(1)下一个内存池指针pNextMemPool,其为表示专供该模块使用的其它静态内存池的地址指针;
(2)空闲链表ulFreeList,其链接所有处于空闲状态的内存分片,如图1所示,链表中的地址指针指向第一个处于空闲状态下内存分片在内存分片描述块内的位置;
(3)使用链表ulUsedList,其链接所有处于使用状态的内存分片,链表中的地址指针指向第一个处于使用状态下内存分片在内存分片描述块内的位置(未画出);
(4)分片大小ulSliceSize,其表示本静态内存池中每块内存分片的大小;
(5)分片数量ulSliceNum,其表示本静态内存池中内存分片的总数;
(6)空闲数量ulFreeNum,其表示当前处于空闲状态的内存分片的数量;
(7)使用数量ulUsedNum,其表示当前处于使用状态的内存分片的数量;
(8)内存池开始地址pBeginAddr,其表示本静态内存池的开始地址;
(9)内存池结束地址pEndAddr,其表示本静态内存池的结束地址;
(10)内存池大小ulPoolSize,其表示本静态内存池的容量;
(11)模块ID号ulMid,其表示使用本静态内存池的模块的标识符;
(12)描述块数组pMemDesc,其为一组内存分片描述块地址指针;以及
(13)控制块使用标志ulUsed,其表示该控制块对应的静态内存池是否被使用。
内存分片描述块组由若干内存分片描述块组成,每个内存分片描述块与该静态内存池中的内存分片一一对应以表示相应内存分片的使用状态,其由ulNext和ulUsed两个指针组成,其中ulNext指向空闲链表中下一空闲内存分片或使用链表中下一使用内存分片在内存分片描述块中的位置,ulUsed指向当前内存分片在内存中的实际位置或物理位置。
对静态内存池的操作包括静态内存池创建、内存分片分配、内存分片释放、内存分片增加和静态内存池删除等,以下分别加以描述:
1.静态内存池创建操作
该操作用于在一个模块使用内存前为其预先分配一个静态内存池,一般以接口函数方式实现并可由系统调用,输入的参数包括内存分片的大小ulSliceSize和数量UlSliceNum以及使用该静态内存池的模块标识ulMid,其中内存分片的大小和数量可设定为与该模块可能使用的容量相匹配。该操作函数通过返回该静态内存池的地址指针pMemPool生成一个专供某一模块使用的静态内存池并生成相应的静态内存池控制块和内存分片描述块组,静态内存池控制块和内存分片描述块组根据输入参数初始化,其中初始时空闲链表ulFreeList全满而使用链表ulUsedList为空,内存分片描述块都链接于空闲链表ulFreeList。
2.内存分片分配操作
该操作用于根据模块使用内存的申请,在创建的静态内存池内分配一个内存分片,一般以接口函数方式实现并可由系统调用,输入的参数包括该静态内存池在内存中的地址pMemPool。当模块申请的内存使用量不止一个时,可通过多次调用该接口函数实现。该操作函数将返回一块空闲内存分片的地址pMemBlock并更新静态内存池控制块和内存分片描述块组的信息,具体而言,该操作函数将控制块中空闲链表ulFreeList的指针指向下一空闲内存分片在内存分片描述块中的位置,使用链表ulUsedList的指针指向被返回的空闲内存分片在内存分片描述块中的位置,空闲数量ulFreeNum减一而使用数量ulUsedNum加一;在内存分片描述块组内,与被返回的空闲内存分片对应的描述块置于使用状态,即,其ulNext指针指向先前位于使用链表首部的使用内存分片在内存分片描述块中的位置。
3.内存分片释放操作
该操作用于在模块结束使用一个内存分片时释放该内存分片,使其处于可以被申请使用的空闲状态,一般以接口函数方式实现并可由系统调用,输入的参数包括该静态内存池在内存中的地址pMemPool和内存分片地址pMemBlock。当模块结束使用的内存分片不止一个时,可通过多次调用该接口函数实现。该操作函数将释放该内存分片并更新静态内存池控制块和内存分片描述块组的信息,具体而言,该操作函数将控制块中使用链表ulUsedList的指针指向下一使用内存分片在内存分片描述块中的位置,空闲链表ulFreeList的指针指向该结束使用的内存分片在内存分片描述块中的位置,空闲数量ulFreeNum加一而使用数量ulUsedNum减一;在内存分片描述块组内,与结束使用的内存分片对应的描述块置于空闲状态,即,其ulNext指针指向先前位于空闲链表首部的空闲内存分片在内存分片描述块中的位置。
4.内存分片增加操作
该操作用于在静态内存池生存期间增加一定数量的内存分片,一般以接口函数方式实现并可由系统调用,输入的参数包括该静态内存池在内存中的地址pMemPool和增加的内存分片数量。该操作函数将增设一个新的静态内存池并生成相应的静态内存池控制块和内存分片描述块组,新的静态内存控制块具有与原静态内存池相同的分片大小ulSliceSize和模块ID号ulMid,并且初始时空闲链表ulFreeList全满而使用链表ulUsedList为空,内存分片描述块都链接于空闲链表ulFreeList,另外,原静态内存池控制块中的下一个静态内存池指针pNextMemPool指向该新的静态内存控制块。
5.静态内存池删除操作
该操作用于删除静态内存池以及增加的静态内存池,一般以接口函数方式实现并可由系统调用,输入的参数包括该静态内存池在内存中的地址pMemPool。当模块结束时,该操作函数通过释放该静态内存池和增加的静态内存池空间并删除相应的控制块和描述块组完成删除操作。
在定义了静态内存池控制块和内存分片描述块结构以及对静态内存池操作类型的基础上即可采用本发明的方法。具体的过程如下:
首先系统根据一个模块运行期间可能需要使用的内存数量和内存容量,通过调用静态内存池创建操作函数为该模块预先分配一个静态内存池。随后,在模块执行期间,当需要使用内存时,系统根据模块内程序和/或数据申请的内存数量,通过若干次调用内存分片分配操作函数,将静态内存池内若干个处于空闲状态的内存分片分配给请求方。当这些内存分配结束使用时,系统又通过若干次调用内存分片释放操作函数,释放这些内存空间以供后续使用。如果在模块执行期间需要增加静态内存池的容量,则可以通过调用内存分片增加操作函数,为该模块配置一个新的静态内存池,如上所述,新的静态内存控制块具有与原静态内存池相同的分片大小ulSliceSize和模块ID号ulMid。最后,当整个模块结束使用时,通过调用静态内存池删除操作函数删除静态内存池。
Claims (7)
1.一种静态内存管理方法,其特征在于,将内存的某一连续存储区域预先分配给一组程序和/或数据专门使用,该存储区域包含若干大小相等的内存分片,并在内存中保存涉及该存储区域配置和状态的相关信息,所述相关信息包括内存分片的大小、处于空闲状态和使用状态的内存分片数量和地址、该存储区域开始地址,当该组内有程序和/或数据欲使用内存时,执行以下步骤:
(1a)根据该存储区域的相关信息获取相应数量处于空闲状态的内存分片的地址并将这些内存分片置于使用状态;
(1b)根据步骤(1a)获取的内存分片地址,将对应的存储空间分配给欲使用内存的程序和/或数据,
当该组内程序和/或数据结束内存使用时,执行以下步骤:
(2a)释放结束使用的内存分片的存储空间;
(2b)根据该存储区域的相关信息确定结束使用的内存分片的地址并将这些内存分片置于空闲状态。
2.如权利要求1所述的静态内存管理方法,其特征在于,每块所述内存分片两端设置标识其边界的标志字节。
3.如权利要求1或2所述的静态内存管理方法,其特征在于,通过在内存中为该组程序和/或数据增设另一连续存储区域并保存涉及该增设存储区域配置和状态的相关信息来增加该组程序和/或数据所使用的内存。
4.如权利要求3所述的静态内存管理方法,其特征在于,所述相关信息还包括该存储区域的结束地址以及该存储区域的大小。
5.如权利要求4所述的静态内存管理方法,其特征在于,以链表方式记录处于空闲状态和使用状态的内存分片的地址,并通过链表操作获取内存分片地址和在空闲状态与使用状态之间切换内存分片的状态。
6.如权利要求4所述的静态内存管理方法,其特征在于,所述涉及该存储区域配置和状态的相关信息进一步包括增设存储区域的地址。
7.如权利要求5所述的静态内存管理方法,其特征在于,所述涉及该存储区域配置和状态的相关信息进一步包括增设存储区域的地址。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB031158749A CN1271524C (zh) | 2003-03-19 | 2003-03-19 | 一种静态内存管理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB031158749A CN1271524C (zh) | 2003-03-19 | 2003-03-19 | 一种静态内存管理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1532708A CN1532708A (zh) | 2004-09-29 |
CN1271524C true CN1271524C (zh) | 2006-08-23 |
Family
ID=34284478
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB031158749A Expired - Fee Related CN1271524C (zh) | 2003-03-19 | 2003-03-19 | 一种静态内存管理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN1271524C (zh) |
Families Citing this family (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1984042B (zh) * | 2006-05-23 | 2010-10-27 | 华为技术有限公司 | 一种缓存地址的管理方法及装置 |
CN101470632B (zh) * | 2007-12-24 | 2014-10-08 | 华为软件技术有限公司 | 共享内存管理方法及装置 |
CN101221536B (zh) * | 2008-01-25 | 2010-06-16 | 中兴通讯股份有限公司 | 嵌入式系统的内存管理方法及装置 |
CN101546292B (zh) * | 2008-03-25 | 2010-12-08 | 北京恒光创新科技股份有限公司 | 一种内存存取方法及装置 |
JP4696151B2 (ja) * | 2008-10-23 | 2011-06-08 | 株式会社エヌ・ティ・ティ・ドコモ | 情報処理装置およびメモリ管理方法 |
CN101645846B (zh) * | 2009-09-02 | 2011-10-26 | 中兴通讯股份有限公司 | 一种路由交换设备及其数据缓存的方法 |
CN101859279B (zh) * | 2010-05-21 | 2012-05-09 | 北京星网锐捷网络技术有限公司 | 一种内存分配、释放方法及装置 |
CN102163176B (zh) * | 2011-04-15 | 2013-04-03 | 汉王科技股份有限公司 | 内存分配、中断消息处理的方法和装置 |
CN102760080B (zh) * | 2011-04-26 | 2016-08-03 | 腾讯科技(深圳)有限公司 | 一种内存管理的方法和装置 |
CN102999434A (zh) * | 2011-09-15 | 2013-03-27 | 阿里巴巴集团控股有限公司 | 一种内存管理方法及装置 |
WO2013155673A1 (zh) * | 2012-04-17 | 2013-10-24 | 中兴通讯股份有限公司 | 片内共享缓存的管理方法及装置 |
CN102915276B (zh) * | 2012-09-25 | 2015-06-03 | 武汉邮电科学研究院 | 一种用于嵌入式系统的内存控制方法 |
CN102981919B (zh) * | 2012-11-02 | 2015-07-01 | 福建升腾资讯有限公司 | 快速定位错误源头的内存管理方法 |
CN103064754A (zh) * | 2012-11-14 | 2013-04-24 | 福建升腾资讯有限公司 | 快速定位错误源头的内存管理方法 |
CN103678172B (zh) * | 2013-12-25 | 2017-05-03 | Tcl集团股份有限公司 | 一种本地数据缓存管理方法及装置 |
CN107665146B (zh) * | 2016-07-29 | 2020-07-07 | 华为技术有限公司 | 内存管理装置和方法 |
CN106339258B (zh) * | 2016-08-10 | 2019-10-18 | 西安诺瓦星云科技股份有限公司 | 可编程逻辑器件与微处理器共享内存的管理方法及装置 |
CN107783812B (zh) * | 2016-08-24 | 2022-03-08 | 阿里巴巴集团控股有限公司 | 虚拟机内存管理方法及装置 |
CN109308269B (zh) * | 2017-07-26 | 2021-02-23 | 华为技术有限公司 | 一种内存管理方法及装置 |
EP4345629A3 (en) * | 2017-11-07 | 2024-07-03 | Huawei Technologies Co., Ltd. | Memory block reclamation method and apparatus |
CN109656836A (zh) * | 2018-12-24 | 2019-04-19 | 新华三技术有限公司 | 一种数据处理方法及装置 |
CN113688062B (zh) * | 2020-05-18 | 2022-08-26 | 北京市商汤科技开发有限公司 | 用于存储数据的方法和相关产品 |
-
2003
- 2003-03-19 CN CNB031158749A patent/CN1271524C/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
CN1532708A (zh) | 2004-09-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1271524C (zh) | 一种静态内存管理方法 | |
CN108038002B (zh) | 一种嵌入式软件内存管理方法 | |
US6453403B1 (en) | System and method for memory management using contiguous fixed-size blocks | |
JP4511653B2 (ja) | マルチスレッド仮想マシン内におけるメモリ・アロケーションの方法及び装置 | |
CN108132842B (zh) | 一种嵌入式软件内存管理系统 | |
CN1266590C (zh) | 面向构件基于系统内核的进程池/线程池管理方法 | |
US6594749B1 (en) | System and method for memory management using fixed-size blocks | |
US6141722A (en) | Method and apparatus for reclaiming memory | |
CN1604051A (zh) | 用于通过面向对象的程序执行动态内存管理的方法和设备 | |
EP2175370A1 (en) | System and method of using pooled thread-local character arrays | |
CN1717645A (zh) | 用于多线程处理器性能控制的装置和方法 | |
CN103455433B (zh) | 内存管理方法及系统 | |
CN1648879A (zh) | 自适应垃圾收集方法及设备 | |
US8499138B2 (en) | Demand-based memory management of non-pagable data storage | |
CN105469173A (zh) | 一种静态内存进行优化管理的方法 | |
CN114327917A (zh) | 内存管理方法、计算设备及可读存储介质 | |
US20240338135A1 (en) | Storage space allocation method, terminal device and storage medium | |
CN103488577A (zh) | 一种基于用途编号的用户程序内存分配及批量回收的方法及装置 | |
CN1851676A (zh) | 一种嵌入式系统缓冲式内存分配方法 | |
CN104536773B (zh) | 基于内存扫描的嵌入式软件动态内存回收方法 | |
CN106598736A (zh) | 一种内存池的内存块调用方法和释放方法及服务器 | |
CN101030135A (zh) | 一种在共享内存中存储c++对象的方法及装置 | |
US5678024A (en) | Method and system for dynamic performance resource management within a computer based system | |
Diwase et al. | Survey report on memory allocation strategies for real time operating system in context with embedded devices | |
CN1687904A (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 | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20060823 Termination date: 20110319 |