CN105469173A - 一种静态内存进行优化管理的方法 - Google Patents
一种静态内存进行优化管理的方法 Download PDFInfo
- Publication number
- CN105469173A CN105469173A CN201410406639.XA CN201410406639A CN105469173A CN 105469173 A CN105469173 A CN 105469173A CN 201410406639 A CN201410406639 A CN 201410406639A CN 105469173 A CN105469173 A CN 105469173A
- Authority
- CN
- China
- Prior art keywords
- memory
- internal
- storage area
- fragmentation
- state
- 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
- 230000003068 static effect Effects 0.000 title claims abstract description 73
- 238000000034 method Methods 0.000 title claims abstract description 21
- 238000006062 fragmentation reaction Methods 0.000 claims description 103
- 238000013467 fragmentation Methods 0.000 claims description 92
- 239000012634 fragment Substances 0.000 abstract description 3
- 238000011084 recovery Methods 0.000 abstract description 3
- 230000006870 function Effects 0.000 description 22
- 230000009471 action Effects 0.000 description 4
- 238000012217 deletion Methods 0.000 description 4
- 230000037430 deletion Effects 0.000 description 4
- 230000008569 process Effects 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 238000007599 discharging Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000001788 irregular Effects 0.000 description 1
- 238000004321 preservation Methods 0.000 description 1
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开一种静态内存进行优化管理的方法,其特征在于,将内存的某一连续存储区域预先分配给一组程序和/或数据专门使用,该存储区域包含若干大小相等的内存分片,并在内存中保存涉及该存储区域配置和状态的相关信息,当该组内有程序和/或数据欲使用内存时,根据该存储区域的相关信息获取相应数量处于空闲状态的内存分片的地址并将这些内存分片置于使用状态,根据步骤获取的内存分片地址,将对应的存储空间分配给欲使用内存的程序和/或数据。本发明有利于提高内存管理速度和效率,不会出现内存碎片的问题,避免了内存碎片回收带来的额外开支,简化了内存分配算法,保证了系统的稳定和效率。
Description
技术领域
本发明涉及一种静态内存进行优化管理的方法。
背景技术
计算机系统由硬件和软件两大部分组成。硬件部分称为裸机,它包括主机和外部设备,而主机由中央处理器(CPU)和内存组成,其中CPU负责运算和对其它部件进行控制;内存用来存储程序和数据。软件部分包括系统软件和应用软件,其中作为系统软件的操作系统对计算机系统的所有资源进行控制和管理,使它们得到合理和充分的利用。内存管理在操作系统中占有关键的地位,其管理功能主要包括内存分配和回收、逻辑地址与物理地址的转换、存储保护以及内存扩充等,其中内存的跟踪、回收、调试和碎片整理等处理一直是内存管理的重点和难点,也是影响整个系统稳定和效率的关键,这就要求使用的操作系统(或虚拟操作系统)能够提供高效、稳定的内存管理方法。
在一种已有的内存管理方案中,将内存块分为两类并利用两个链表分别进行管理,其中一个链表为空闲内存链表,用于链接空闲的内存块;另一个为使用链表,用于链接正在使用的内存块。各内存块的大小是不规则的(即大小可能不等),当有内存使用申请时,操作系统根据申请的内存使用量,从空闲链表中选择合适的内存块放入使用链表以分配给申请方使用,当使用结束后,内存块被释放并被放入空闲链表,并判断该内存块是否可与空闲链表中的其它内存块整合成一块更大的内存块,如果可以,则进行碎片整理以整合形成更大的内存块。这种方法的优点是可以统一方式管理内存,缺点是在内存使用过程中容易出现大量的碎片,导致内存浪费,此外,碎片整理算法复杂和效率低下,从而影响系统的整体性能,最后,该方法仍然无法解决内存耗尽的问题(即,当一个任务或线程出现内存泄露时,它可能耗尽系统所有的内存资源,进而影响整个系统,甚至导致崩溃〉。
发明内容
为解决上述现有的缺点,本发明的主要目的在于提供一种实用的静态内存进行优化管理的方法,有利于提高内存管理速度和效率,不会出现内存碎片的问题,避免了内存碎片回收带来的额外开支,简化了内存分配算法,保证了系统的稳定和效率。
为达成以上所述的目的,本发明的一种静态内存进行优化管理的方法采取如下技术方案:
一种静态内存进行优化管理的方法,其特征在于,将内存的某一连续存储区域预先分配给一组程序和/或数据专门使用,该存储区域包含若干大小相等的内存分片,并在内存中保存涉及该存储区域配置和状态的相关信息,当该组内有程序和/或数据欲使用内存时,执行以下步骤:
(a)根据该存储区域的相关信息获取相应数量处于空闲状态的内存分片的地址并将这些内存分片置于使用状态;
(b)根据步骤(1a)获取的内存分片地址,将对应的存储空间分配给欲使用内存的程序和/或数据,
当该组内程序和/或数据结束内存使用时,执行以下步骤:
(2a)释放结束使用的内存分片的存储空间:
(2b)根据该存储区域的相关信息确定结束使用的内存分片的地址并将这些内存分片置于空闲状态。
所述的一种静态内存进行优化管理的方法,其特征在于,每块所述内存分片两端设置标识其边界的标志字节,通过在内存中为该组程序和/或数据增设另一连续存储区域并保存涉及该增设存储区域配置和状态的相关信息来增加该组程序和/或数据所使用的内存,所述涉及该存储区域配置和状态的相关信息包括内存分片的大小、处于空闲状态和使用状态的内存分片数量和地址、该存储区域开始和结束地址以及该存储区域的大小,以链表方式记录处于空闲状态和使用状态的内存分片的地址,并通过链表操作获取内存分片地址和在空闲状态与使用状态之间切换内存分片的状态,所述涉及该存储区域配置和状态的相关信息进一步包括增设存储区域的地址。
采用如上技术方案的本发明,具有如下有益效果:
本发明由于为一组程序和/或数据分配专用的连续存储区域,因此在出现内存泄露时该组程序和/或数据仅将该区域中的内存耗尽,不会波及系统其它部分的运行。其次,由于存储区域是连续的,因此有利于提高内存管理速度和效率。最后,该连续存储区域包含若干大小相等的内存分片,程序和/数据以内存分片为单位使用该区域,因此不会出现内存碎片的问题,避免了内存碎片回收带来的额外开支,简化了内存分配算法,保证了系统的稳定和效率。
附图说明
图1为本发明的一个实施例的示意图。
具体实施方式
为了进一步说明本发明,下面结合附图进一步进行说明:
一般情况下,一组程序和/或数据对内存的使用时间和大小是动态和随机的,在上述现有技术的内存管理方案中,当需要使用时,系统根据使用内存的大小为之分配相应的内存,而当使用结束后则收回使用权并释放该内存空间。如上所述,这种动态内存管理容易引发内存耗尽、系统崩溃和管理复杂而低效等缺点。为此,本发明的基本思想是,预先在内存中为一组程序和/或数据分配一块连续存储区域(以下又称为静态内存池)供其专用,静态内存池包含若干大小相等的内存分片,并且以内存分片为单位,为需要使用静态内存池的程序和/或数据分配相应数量的内存,而在结束使用时又释放这些内存分片以供后续使用。
在内存分片的分配和释放过程中,将要利用静态内存池的配置和状态信息,例如内存分片的大小和总数以及处于空闲状态和使用状态的内存分片的地址等。对于本领域内技术人员来说,利用这些信息分配和释放内存分片的实现方式是公知的,并且与本发明方法的基本思想无关,因此具体的思想方式不应构成对本发明精神和范围的限定。此外,在本发明中,对这些信息的保存位置没有特别的限定,只要保证这些信息不丢失和损坏即可,因此它们既可以保存在静态内存池区域内,也可以保存在静态内存池以外的区域。
值得指出的是,这里所称的一组程序和/或数据的含义应该理解为若干程序的集合、若干程序与数据的集合以及若干数据的集合,虽然在相当多的情况下,一组程序和/数据可能隶属于整个系统内完成一定逻辑功能的模块实体,并且集合内程序之间、数据之间以及程序与数据之间存在执行逻辑上的关系,但是对于本发明的基本思想本身或者其实现而言,这种执行逻辑上的关系并非必需的,因此不应构成对本发明精神和范围的限定。
为了防止向一块内存分片写入程序或数据时越过其边界,可以在每块所述内存分片两端设置标识其边界的标志字节,当读取到标志字节时系统即判定写入操作已经到达内存分片的边界并停止对该内存分片的写入。此外,虽然静态内存池的内存分片大小在静态内存池创建时确定后即不能修改,但是可以通过在内存中增设另一连续存储区域并保存涉及该增设存储区域配置和状态的相关信息来增加该组程序和/或数据所使用的内存。
以下借助附图描述本发明方法的较佳实施例,在该较佳实施例中,使用该静态内存池的一组程序和/或数据隶属于一个模块,釆用静态内存池控制块和内存分片描述块组来描述静态内存池的有关信息并通过改变这些相关信息实现内存分片的分配和释放等管理功能,其中控制块用来描述和记录静态内存池的当前状态,而内存分片描述块组用来描述内存分片的状态。
图1示出了控制块和内存分片描述块组的数据结构及其与内存分片的对应关系。如图1所示,静态内存池控制块包含如下的信息段:
(1)下一个内存池指针pNextMemPool,其为表示专供该模块使用的其它静态内存池的地址指针;
(2)空闲链表ulFreeList,其链接所有处于空闲状态的内存分片,如图1所示,链表中的地址指针指向第一个处于空闲状态下内存分片在内存分片描述块内的位置;
(3)使用链表ulUsedList,其链接所有处于使用状态的内存分片,链表中的地址指针指向第一个处于使用状态下内存分片在内存分片描述块内的位置(未画出);
(4)分片大小ulSliceSize,其表示本静态内存池中每块内存分片的大小;
(5)分片数量ulSliceNum,其表示本静态内存池中内存分片的总数;
(6)空闲数量ulSliceNum,其表示当前处于空闲状态的内存分片的数量;
(7)使用数量ulUsedNum,其表示当前处于使用状态的内存分片的数量;
(8)内存池开始地址pBeginAddr,其表示本静态内存池的幵始地址;
(9)内存池结束地址pEndAddr,其表示本静态内存池的结束地址;
(10)内存池大小ulPoolSize。其表示本静态内存池的容量;
(11)模块ID号ulMid,其表示使用本静态内存池的模块的标识符;
(12)描述块数组pMenDesc,其为一组内存分片描述块地址指针;
(13)控制块使用标志ulUsed,其表示该控制块对应的静态内存池是否被使用。
内存分片描述块组由若干内存分片描述块组成,每个内存分片描述块与该静态内存池中的内存分片一一对应以表示相应内存分片的使用状态,其由ulNext和ulUsed化两个指针组成,其中ulNext指向空闲链表中下一空闲内存分片或使用链表中下一使用内存分片在内存分片描述块中的位置,ulUsed指向当前内存分片在内存中的实际位置或物理位置。
对静态内存池的操作包括静态内存池创建、内存分片分配、内存分片释放、内存分片增加和静态内存池删除等,以下分别加以描述:
1.静态内存池创建操作
该操作用于在一个模块使用内存前为其预先分配一个静态内存池,一般以接口函数方式实现并可由系统调用,输入的参数包括内存分片的大小ulSliceSize和数量UlSliceNum以及使用该静态内存池的模块标识岀她山其中内存分片的大小和数量可设定为与该模块可能使用的容量相匹配。该操作函数通过返回该静态内存池的地址指针生成一个专供某一模块使用的静态内存池并生成相应的静态内存池控制块和内存分片描述块组,静态内存池控制块和内存分片描述块组根据输入参数初始化,其中初始时空闲链表全满而使用链表为空,内存分片描述块都链接于空闲链表。
2.内存分片分配操作
该操作用于根据模块使用内存的申请,在创建的静态内存池内分配一个内存分片,一般以接口函数方式实现并可由系统调用,输入的参数包括该静态内存池在内存中的地址。当模块申请的内存使用量不止一个时,可通过多次调用该接口函数实现。该操作函数将返回一块空闲内存分片的地址并更新静态内存池控制块和内存分片描述块组的信息,具体而言,该操作函数将控制块中空闲链表的指针指向下一空闲内存分片在内存分片描述块中的位置,使用链表的指针指向被返回的空闲内存分片在内存分片描述块中的位置,空闲数量减一而使用数量加一;在内存分片描述块组内,与被返回的空闲内存分片对应的描述块置于使用状态,即,其ulNext指针指向先前位于使用链表首部的使用内存分片在内存分片描述块中的位置。
3.内存分片释放操作
该操作用于在模块结束使用一个内存分片时释放该内存分片,使其处于可以被申请使用的空闲状态,一般以接口函数方式实现并可由系统调用,输入的参数包括该静态内存池在内存中的地址和内存分片地址当模块结束使用的内存分片不止一个时,可通过多次调用该接口函数实现。该操作函数将释放该内存分片并更新静态内存池控制块和内存分片描述块组的信息,具体而言,该操作函数将控制块中使用链表记的指针指向下一使用内存分片在内存分片描述块中的位置,空闲链表的指针指向该结束使用的内存分片在内存分片描述块中的位置,空闲数量加一而使用数量减一;在内存分片描述块组内,与结束使用的内存分片对应的描述块置于空闲状态,即,其指针指向先前位于空闲链表首部的空闲内存分片在内存分片描述块中的位置。
4.内存分片增加操作
该操作用于在静态内存池生存期间增加一定数量的内存分片,一般以接口函数方式实现并可由系统调用,输入的参数包括该静态内存池在内存中的地址和增加的内存分片数量。该操作函数将增设一个新的静态内存池并生成相应的静态内存池控制块和内存分片描述块组,新的静态内存控制块具有与原静态内存池相同的分片大小和模块ID号,并且初始时空闲链表全满而使用链表为空,内存分片描述块都链接于空闲链表,另外,原静态内存池控制块中的下一个静态内存池指针指向该新的静态内存控制块。
5.静态内存池删除操作
该操作用于删除静态内存池以及增加的静态内存池,一般以接口函数方式实现并可由系统调用,输入的参数包括该静态内存池在内存中的地址。当模块结束时,该操作函数通过释放该静态内存池和增加的静态内存池空间并删除相应的控制块和描述块组完成删除操作。
在定义了静态内存池控制块和内存分片描述块结构以及对静态内存池操作类型的基础上即可采用本发明的方法。具体的过程如下:
首先系统根据一个模块运行期间可能需要使用的内存数量和内存容量,通过调用静态内存池创建操作函数为该模块预先分配一个静态内存池。随后,在模块执行期间,当需要使用内存时,系统根据模块内程序和/或数据申请的内存数量,通过若干次调用内存分片分配操作函数,将静态内存池内若干个处于空闲状态的内存分片分配给请求方。当这些内存分配结束使用时,系统又通过若干次调用内存分片释放操作函数,释放这些内存空间以供后续使用。如果在模块执行期间需要增加静态内存池的容量,则可以通过调用内存分片增加操作函数,为该模块配置一个新的静态内存池,如上所述,新的静态内存控制块具有与原静态内存池相同的分片大小ulSliceSize和模块ID号ulMid。最后,当整个模块结束使用时,通过调用静态内存池删除操作函数删除静态内存池。
Claims (2)
1.一种静态内存进行优化管理的方法,其特征在于,将内存的某一连续存储区域预先分配给一组程序和/或数据专门使用,该存储区域包含若干大小相等的内存分片,并在内存中保存涉及该存储区域配置和状态的相关信息,当该组内有程序和/或数据欲使用内存时,执行以下步骤:
(a)根据该存储区域的相关信息获取相应数量处于空闲状态的内存分片的地址并将这些内存分片置于使用状态;
(b)根据步骤(1a)获取的内存分片地址,将对应的存储空间分配给欲使用内存的程序和/或数据,
当该组内程序和/或数据结束内存使用时,执行以下步骤:
(2a)释放结束使用的内存分片的存储空间:
(2b)根据该存储区域的相关信息确定结束使用的内存分片的地址并将这些内存分片置于空闲状态。
2.如权利要求1所述的一种静态内存进行优化管理的方法,其特征在于,每块所述内存分片两端设置标识其边界的标志字节,通过在内存中为该组程序和/或数据增设另一连续存储区域并保存涉及该增设存储区域配置和状态的相关信息来增加该组程序和/或数据所使用的内存,所述涉及该存储区域配置和状态的相关信息包括内存分片的大小、处于空闲状态和使用状态的内存分片数量和地址、该存储区域开始和结束地址以及该存储区域的大小,以链表方式记录处于空闲状态和使用状态的内存分片的地址,并通过链表操作获取内存分片地址和在空闲状态与使用状态之间切换内存分片的状态,所述涉及该存储区域配置和状态的相关信息进一步包括增设存储区域的地址。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410406639.XA CN105469173A (zh) | 2014-08-19 | 2014-08-19 | 一种静态内存进行优化管理的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410406639.XA CN105469173A (zh) | 2014-08-19 | 2014-08-19 | 一种静态内存进行优化管理的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105469173A true CN105469173A (zh) | 2016-04-06 |
Family
ID=55606842
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410406639.XA Pending CN105469173A (zh) | 2014-08-19 | 2014-08-19 | 一种静态内存进行优化管理的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105469173A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106354661A (zh) * | 2016-09-13 | 2017-01-25 | 郑州云海信息技术有限公司 | 一种针对存储软件的内存分配方法及装置 |
CN107544964A (zh) * | 2016-06-24 | 2018-01-05 | 吴建凰 | 一种用于时序数据库的数据块存储方法 |
WO2018018896A1 (zh) * | 2016-07-29 | 2018-02-01 | 华为技术有限公司 | 内存管理装置和方法 |
CN113485822A (zh) * | 2020-06-19 | 2021-10-08 | 中兴通讯股份有限公司 | 内存管理方法、系统、客户端、服务器及存储介质 |
CN113535597A (zh) * | 2020-04-14 | 2021-10-22 | 阿里巴巴集团控股有限公司 | 内存管理方法、内存管理单元和物联网设备 |
CN116701243A (zh) * | 2023-08-03 | 2023-09-05 | 烟台东方威思顿电气有限公司 | 裸机下的存储空间分配管理方法 |
-
2014
- 2014-08-19 CN CN201410406639.XA patent/CN105469173A/zh active Pending
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107544964A (zh) * | 2016-06-24 | 2018-01-05 | 吴建凰 | 一种用于时序数据库的数据块存储方法 |
WO2018018896A1 (zh) * | 2016-07-29 | 2018-02-01 | 华为技术有限公司 | 内存管理装置和方法 |
CN106354661A (zh) * | 2016-09-13 | 2017-01-25 | 郑州云海信息技术有限公司 | 一种针对存储软件的内存分配方法及装置 |
CN113535597A (zh) * | 2020-04-14 | 2021-10-22 | 阿里巴巴集团控股有限公司 | 内存管理方法、内存管理单元和物联网设备 |
CN113535597B (zh) * | 2020-04-14 | 2024-05-03 | 阿里巴巴集团控股有限公司 | 内存管理方法、内存管理单元和物联网设备 |
CN113485822A (zh) * | 2020-06-19 | 2021-10-08 | 中兴通讯股份有限公司 | 内存管理方法、系统、客户端、服务器及存储介质 |
CN116701243A (zh) * | 2023-08-03 | 2023-09-05 | 烟台东方威思顿电气有限公司 | 裸机下的存储空间分配管理方法 |
CN116701243B (zh) * | 2023-08-03 | 2023-10-20 | 烟台东方威思顿电气有限公司 | 裸机下的存储空间分配管理方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101221536B (zh) | 嵌入式系统的内存管理方法及装置 | |
JP5510556B2 (ja) | 仮想マシンのストレージスペースおよび物理ホストを管理するための方法およびシステム | |
CN105469173A (zh) | 一种静态内存进行优化管理的方法 | |
TWI738037B (zh) | 分區分裂方法、裝置、電子設備及可讀儲存媒體 | |
CN1271524C (zh) | 一种静态内存管理方法 | |
CN104731799A (zh) | 内存数据库管理装置 | |
CN107783812B (zh) | 虚拟机内存管理方法及装置 | |
CN110858162B (zh) | 内存管理方法及装置、服务器 | |
JP7467593B2 (ja) | リソース割振り方法、記憶デバイス、および記憶システム | |
KR102594657B1 (ko) | 비순차적 리소스 할당을 구현하는 방법 및 장치 | |
JP5574464B2 (ja) | ストレージリソースの階層化管理方法及びシステム | |
CN106445835A (zh) | 内存分配方法与装置 | |
CN105718319B (zh) | 一种内存池版图解析方法和内存池装置 | |
CN104317734A (zh) | 一种适用于slab的内存分配方法及装置 | |
CN101226553A (zh) | 一种嵌入式数据库变长字段存储的实现方法及装置 | |
CN114327917A (zh) | 内存管理方法、计算设备及可读存储介质 | |
US20240338135A1 (en) | Storage space allocation method, terminal device and storage medium | |
CN103455433A (zh) | 内存管理方法及系统 | |
CN105468541A (zh) | 一种面向透明计算智能终端的缓存管理方法 | |
CN110109677B (zh) | 一种动态对象缓存池分配方法 | |
CN105760391A (zh) | 数据动态重分布的方法、数据节点、名字节点及系统 | |
US11119703B2 (en) | Utilizing a set of virtual storage units distributed across physical storage units | |
CN104281587A (zh) | 一种建立连接的方法及装置 | |
CN113778688B (zh) | 内存管理系统、内存管理方法、内存管理装置 | |
CN116955212A (zh) | 内存碎片的整理方法、装置、设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication |