CN101499034A - 内存管理方法 - Google Patents
内存管理方法 Download PDFInfo
- Publication number
- CN101499034A CN101499034A CNA2009100790574A CN200910079057A CN101499034A CN 101499034 A CN101499034 A CN 101499034A CN A2009100790574 A CNA2009100790574 A CN A2009100790574A CN 200910079057 A CN200910079057 A CN 200910079057A CN 101499034 A CN101499034 A CN 101499034A
- Authority
- CN
- China
- Prior art keywords
- memory
- piece
- value
- partitioning
- index
- 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
- 230000015654 memory Effects 0.000 title claims abstract description 527
- 238000007726 management method Methods 0.000 title abstract description 23
- 238000000638 solvent extraction Methods 0.000 claims description 104
- 238000000034 method Methods 0.000 claims description 43
- 230000008569 process Effects 0.000 claims description 33
- 230000007935 neutral effect Effects 0.000 claims description 10
- 238000005192 partition Methods 0.000 claims description 10
- 239000003607 modifier Substances 0.000 claims description 6
- 101100290346 Arabidopsis thaliana MBS1 gene Proteins 0.000 description 4
- 101100290347 Arabidopsis thaliana MBS2 gene Proteins 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 238000011084 recovery Methods 0.000 description 3
- 238000011161 development Methods 0.000 description 2
- 230000018109 developmental process Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 238000013316 zoning Methods 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000007599 discharging Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000006855 networking Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 230000000630 rising effect Effects 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Images
Landscapes
- Memory System (AREA)
Abstract
本发明公开了一种内存管理方法,其可适用于嵌入式***使用。其包括有以下步骤,提供一定容量的内存区域。对内存区域进行划分使其包括有若干内存分区及其下属的若干单元内存块。当需要提供内存需求时,分配与所需内存需求稍大的单元内存块供其使用。本发明涉及的内存管理方法采用针对嵌入式***特点的内存布局,通过简单的算法高效的对内存进行分配,并可以检测是否发生内存错误。
Description
技术领域
本发明涉及一种内存管理方法,尤其是一种可用于嵌入式***使用的内存管理方法。
背景技术
随着计算机微处理器的技术发展以及计算机网络技术的发展,使得嵌入式***的功能越来越强大同时应用范围越来越广泛。而基于网络的视频监控***为了提高其自身的***性能,便使用了嵌入式***于其中。
进一步的,嵌入式应用***为了更好的运行其设定功能,其对内存管理就有以下要求。
实时性。从实时性的角度出发,要求内存分配过程要尽可能地快。因此,在嵌入式***中,不会采用通用操作***的一些复杂而完善的内存分配策略,一般没有段页式的虚存管理机制。而是采用简单、快速的内存分配方案,其分配方案也因程序对实时性的要求而异。
可靠性。嵌入式***应用的环境***,在有些特定情况下,对***的可靠性要求极高,内存分配的请求必须得到满足,如果分配失败则可能会带来灾难性的后果。
高效性。内存分配要尽可能地减少浪费,不能为了保证满足所有的内存分配请求而将内存配置的很大。这是因为,一方面,嵌入式***对成本的要求使得内存只是它的一种很有限的资源;另一方面,即使不考虑成本的因素,***硬件环境有限的空间和有限的板面积决定了可配置的内存容量是很有限的。
因此,业界亟待提出一种新的用于嵌入式***的内存管理方法,使得其可有效的实现上述要求。
发明内容
有鉴于此,本发明的一个目的在于提供一种内存管理方法,其可被用于嵌入式***使用。该方法可以在嵌入式***的程序启动时分配并初始化程序要用到的内存空间,通过相应的算法可以高效地完成内存的分配、回收工作。
为了达到上述目的,本发明的一个实施方式提供了一种内存管理方法,其中涉及的内存区域被划分为若干个内存分区,每个内存分区被划分为若干个单元内存块,每个内存分区内的单元内存块的容量相同,而各内存分区中的单元内存块的容量不同。该方法包括有以下步骤。接收包括有内存需求容量的内存分配请求。找到其内的单元内存块的容量大于该内存需求容量且最小的内存分区。在该找到的内存分区内找到使用状态为未使用的单元内存块,并将该找到的未使用的单元内存块分配给此次内存分配请求,将被分配出的单元内存块的使用状态修改为已使用。接收用于释放指定单元内存块的内存释放请求。找到该需要释放指定单元内存块所在的内存分区。在该找到的内存分区内找到该需要释放的指定单元内存块,释放该指定单元内存块,将被释放的单元内存块的使用状态修改为未使用。
进一步的,在不同实施方式中,各内存分区都有各自的内存管理参数,其包括可用内存块数量索引、未使用内存块索引、释放内存块索引以及释放内存块存储栈。其中可用内存块数量索引用于表明本内存分区内使用状态为未使用的可用于分配的单元内存块数量。未使用内存块索引则是用于存储本内存分区内未使用的单元内存块编号。释放内存块索引以及释放内存块存储栈则都是用于存储本内存分区内释放的单元内存块编号,其中释放内存块存储栈则是在释放内存块索引存储了一个释放单元内存块之后,再进行其它的释放单元内存块编号的存储。
进一步的,在不同实施方式中,在步骤B后,根据找到的内存分区的可用内存块数量索引判断找到的内存分区内是否还有可用单元内存块,如果有,则进入步骤C;如果否,则找到相邻的下一个内存分区,并再次根据找到的内存分区的可用内存块数量索引判断该内存分区内是否有可用单元内存块,如果有,则进入步骤C;否则继续重复上述步骤直到找到具有可用单元内存块的内存分区并进入步骤C;
步骤C包括:查看找到的内存分区的释放内存块索引是否为空,如果不为空,则将其内存储的释放单元内存块编号对应的单元内存块分配给该内存分配请求,将分配出的单元内存块的状态修改为使用,查看释放内存块存储栈内是否存储有释放单元内存块编号,如果有,则将释放内存块存储栈中存储的一个释放单元内存块的编号赋值给释放内存块索引;如果没有,则将释放内存块索引的值修改为空值,并将分区内可用内存块数量索引的数值减1。如果释放内存块索引为空值,则将未使用内存块索引内存储的从未使用的单元内存块的编号所对应的单元内存块分配给内存分配请求,然后将分区内下一个从未使用的单元内存块编号赋值给未使用内存块索引,将被分配出的单元内存块的使用状态修改为已使用。最后将可用内存块数量索引的数值减1。
步骤F包括:在找到的内存分区内找到需要释放指定单元内存块,释放该指定单元内存块,将被释放的单元内存块的使用状态修改为未使用,在释放内存块索引为空值时,将被释放的单元内存块的编号赋值给释放内存块索引。在释放内存块索引不为空值时,将被释放的单元内存块的编号存入释放内存块存储栈中。最后将内存分区内可用内存块数量索引数值加1。
进一步的,在不同实施方式中,提供的内存区域的大小是根据预定运行的若干***程序所需内存的总需求大小计算得出,其为根据各程序的内存需求的数值,将其分在至少两个数值范围内,以各数值范围的最大值为单元值以及落于其内的数值的数量两者的乘积,计算出***程序的内存总需求的最大值,然后根据这个最大值提供相应数值的内存区域。
进一步的,在不同实施方式中,提供的内存区域的各分区的排列方式为按各内存分区的单元内存块的大小进行顺序排列。
进一步的,在不同实施方式中,步骤B包括,根据二分法进行内存请求数值与提供的内存区域包括的单元内存块数值间的比较,其为在初始时,选择最小的单元内存块的值为起始值,最大单元内存块的值为终点值,然后选择处于两者之间的初始中间值与其进行比较;当其大于初始中间值时,则选择初始中间值为起始值,原终点值为终点值,然后与这两者之间的中间值进行比较;若其小于初始中间值时,则选择初始中间值为终点值,原起始值为起始值,然后与这两者间的中间值进行比较,依次类推,直到最终起始值和最终终点值之间只有一个数值为止,其为最终中间值,这时,若请求数值大于最终中间值,则选择数值为最终终点值的单元内存块所在的内存分区;若其小于,则选择数值为最终中间值的单元内存块所在的内存分区。
进一步的,在不同实施方式中,其还包括记录各内存分区及其下各内存单元块的地址信息。步骤E包括,检查释放单元内存块的地址信息,将其起始地址信息与各内存分区的起始地址进行比较,当两者比较一致时,则找到其所属内存分区。
进一步的,在不同实施方式中,其还包括有以下步骤,在各内存分区内定义未使用内存块索引,其用于存储分区内第一个从未使用过的单元内存块的编号。当对应于其内存储的单元内存块编号的单元内存块被分配出去之后,其会存储分区内下一个未使用单元内存块的编号。
进一步的,在不同实施方式中,其还包括有以下步骤,在各内存分区内定义释放内存块索引,用于存储属于该内存分区的,因***程序终止而释放出的单元内存块的编号。当需要分配单元内存块时,会先检查释放内存块索引内是否存储有释放的的单元内存块编号,若有,则将其对应的单元内存块分配给内存需求,然后将释放内存块索引的附值修改为空值。
进一步的,在不同实施方式中,其还包括有以下步骤,在各内存分区内定义分区内可用内存块数量索引,用于记录该内存分区内的全部可用于分配出的单元内存块的数量,并在该分区内有内存块被分配出去之后,将该数值减1;在进行内存分区内单元存块分配时,当发现该分区内的用于记录该分区可用内存块数量的索引的数值为空值时,则选择其下一个内存分区进行内存块的分配。
相对于现有技术,本发明涉及的可用于嵌入式***的内存管理方法,可有效的实现***对于内存实时性、可靠性及高效性方面的要求,进而提高了***的运行效率。同时采用针对程序特点的内存布局,通过简单的算法高效的对内存进行分配和回收,并可以检测是否发生内存错误。
附图说明
图1是本发明的一个实施方式涉及的内存管理方法的流程图;
图2是使用本发明涉及的内存管理方法进行内存分区划分结构的示意图。
具体实施方式
在一个实施方式中,请参阅图1所示,本发明涉及的内存管理方法100,其包括有以下步骤,初始化内存过程102(以下简称步骤102)、判断是分配内存块请求还是释放内存块请求104(以下简称步骤104),若是分配单元内存块请求,则接下来包括以下步骤:定位内存分区106(以下简称步骤106)、在定位的内存分区内定位内存分块108(以下简称步骤108)、返回定位的内存分块的地址,并记录相应参数110(以下简称步骤110);若是释放内存块请求,则接下来包括定位到内存分区的相应单元内存块112(以下简称步骤112)以及释放相应的内存分块,并记录相关信息114(以下简称步骤114)。
其中在步骤102中,其包括有一个提供内存区域并将内存区域划分成若干个内存分区以及将每个内存分区划分为若干单元内存块的过程,以及记录提供的内存区域的地址并为每个内存分区设定内存管理参数的过程。
提供的具有一定容量的内存区域的数值可以是根据一定的计算方式得出的。例如,在一个实施方式中,其可以是通过使用其的***,在分析***程序的使用需求后计算得出。具体可以是,首先采用操作***自身的内存分配及释放接口或是其它内存管理接口运行程序,记录各个程序所需的动态内存的值。然后根据各程序所需动态内存的值得到这些程序在不同数值范围内的数值分布。然后根据以上划分出的数值范围,以各数值范围的最大值为一个可分配出的单元内存块的值,例如,分别为MBS1、MBS2......MBSn,若各数值范围内所包括的程序的数量分别为M1、M2......Mn。则内存总体需求量的最大值可依照公式MaxMem=MBS1*M1+MBS2*M2+.....MBSn*Mn计算出。如此,提供的内存区域的数值大小及划分出的分区数量及大小,以及各分区内包括的单元内存块的大小及数量都可以通过上述计算式得出。划分出的内存分区通常是按分区单元内存块的大小,按大小数序排列,也就是说具有最小数值单元内存块的内存分区会在各分区的最前面,而具有最大数值单元内存块的分区会在各分区的最后面,其他分区按照其单元内存块数值的大小依次排在这两者之间。提供的内存区域的划分结构示意图,具体请参阅图2所示。
在一个优选的实施例中,为了确保运行程序的内存足够,应该使各分配内存块的数值比程序运行时需要的大一些。也就是说,各数值范围取的最大值最好大于落于该数值范围内的最大的程序所需内存的数值。
进一步的,还要记录提供的内存区域的起始地址,这是为了在后续分配各分区单元内存块时,提供便利。例如,设其为pMemBase。那么该地址同时也是分配内存块MBS1所在内存分区的起始地址pMemBase1。那么可计算得出内存块MBS2所在内存分区起始地址为pMemBase2=pMemBase1+MBS1*M1。其它分配内存块所在的内存分区的起始地址可依此方式分别计算出,并可进而得出各分区内各单元内存块的地址。
在划分出的各内存分区内定义的内存管理参数,其包括有从未使用内存块索引、释放内存块索引、释放内存块存储栈以及可用内存块数量索引。
其中从未使用内存块索引,在初始时,其内会存储本分区内第一个从未使用的单元内存块的编号。在分配过程中,当对应其所存储编号的单元内存块被分配出去后,其会存储本分区内下一个从未使用单元内存块的编号,直到本分区内不在有从未使用过的单元内存块为止。例如,在一个实施方式中,从未使用内存块索引的初始值为0,每次分配出其所指向的单元内存块后,其数值加1,直到本内存分区内全部从未使用的单元内存块被分配完毕后,其数值变为该分区包括的全部单元内存块的数量值,表示此分区内已没有从未使用过的内存块。同时,也就不能在使用其进行分区内单元内存块的分配。
定义释放内存块索引是因为,***为使用程序而分配内存块,同样会因为终止程序而释放出其所占用的内存块。为提高***内存的利用率,也需要有效的利用这些因程序终止而释放出的内存容量。其内可存储有一个释放单元内存块的编号。在一个实施方式中,存储的释放单元内存块编号可以是其地址信息。其初始值可以为-1,但不限于。
定义释放内存块存储栈是因为,一个内存分区一般会包括有若干个单元内存块。在同一个分区内的多个单元内存块被分配出去使用后,当使用这些单元内存块的程序终止时,就会释放出多个单元内存块,而释放内存块索引只能存储一个释放的单元内存块的编号,为了有效管理这些释放出的内存块编号,也就需要在各内存分区内设置一个释放内存块存储栈,用来存储属于该内存分区的被释放出的多个单元内存块的编号。进一步的,各分区内用于存储释放内存块编号的栈,可以是在该分区内的释放内存块索引内存储有释放单元内存块编号时,才可以进行释放单元内存块编号的存储。
定义分区内可用内存块数量索引,是为了管理各分区内可用于分配出去的内存块(包括从未分配出的内存块的数量及释放出的内存块的数量)的数量,其起始数值,也就是该内存分区所包括的全部内存块的数量。当其在使用过程中,其数量会因为本分区内单元内存块的分配使用而减少,例如,每分配出去一个单元内存块,其数值会减1。当分区内有被占用的单元内存块被释放时,其数值也会加1。当其为空值时,则表明本分区内全部内存块均被使用,而不能在提供单元内存块供使用。
当内存初始化过程之后,会接到分配内存块的请求,以及在运行一段时间后,会接到因程序中止而释放其所占用的单元内存块的请求,也就是步骤104。以下将分别对这两种情况加以说明。
当接到的是内存块分配请求时,则在步骤106中,其会先将内存需求的数值与各分区内存块的数值大小进行比较,按照最小满足原则,选择最小的大于该内存需求的单元内存块所在的内存分区进行单元内存块分配。在比较过程中,若提供的内存区域划分出的内存分区的数量较大,可采用二分法进行查找。例如,在一个实施方式中,若提供的内存区域包括有N个内存分区。每个分区的单元内存块的数值按大小排序分别为M1、M2、M3......Mn,这时,接到一个分配内存请求:分配K值内存块。由于分区数量较多,若一一比对,比较浪费时间,则采用二分法进行分区查找。先将K值与全部分区中的中间分区的单元内存块的数值进行比较,若N为偶数,则是N/2这一分区的单元内存块进行比较,假设N/2这一分区的单元内存块的值为Mm;若N是奇数,则是(N+1)/2或(N-1)/2这一分区的单元内存块进行比较。由于两种情况,方法类似,以下以N为偶数为例进行说明。每次比较过程中,涉及的数值为三个,起始值、中间值和终点值,例如,在此次比较中,涉及的起始值为M1、中间值为Mm,终点值为Mn。当K值大于Mm时,则选择Mm为起始值,以Mn为终点值,选择处于两者之间的中间值继续与K值进行比较;若是Mm大于K值,则选择Mm为终点值,以M1为起始值,选择处于两者之间的中间数继续比较,依次类推,直到最后,起始值、中间值和终点值为三个连续的数值为止,这时比较值K值要么处于初始值与中间值之间,要么处于中间值与终点值之间,若其大于中间值,则选择容量为终点值数值的单元内存块所在的内存分区;若其小于中间值,则选择容量为中间值数值的单元内存块所在的内存分区。如此,使用二分法进行数值比较,每次比较的数值都是选择范围内的中间值,相对于一一比较的方式,可在一定程度上减少了比较的次数,提高了效率。而如果发现需求的内存大小比划分出的最大单元内存块的数值还大,则说明内存管理出现错误,报告该错误。
在定位内存分区后,并不意味就一定要在这个内存分区进行单元内存块的分配,这时需要先检查该分区内可用内存块数量索引,当发现其不为空值时,才可确定可以从这个分区进行单元内存块的分配。当发现其为空值时,则要选择下一个内存分区进行单元内存块分配,如此类推,直到找到分区内可用内存块数量索引数值不为空值的分区为止。
在确定内存分区后,则可进行步骤108,定位分区内可分配的单元内存块。检查分区内释放内存块索引的值是否为预设的空值,例如-1,如果不等于-1,则表明其内存有一个释放出的单元内存块的编号(这个编号可以是其地址信息,以下同,但不限于),那么就将该编号所指向的单元内存块分配给这次内存请求,并将其状态修改为使用。然后检查分区内释放内存块存储栈是否为空,若其不为空,则就从该栈中选择(在一个实施方式中,可按存储的先后顺序依次选择,但不限于)一个存储的释放内存块的编号给释放内存块索引。然后将分区内可用内存块数量索引的数值减1,也就是完成步骤110。而若释放内存块索引为空值,则检查分区内未使用内存块索引,将其内所存有的从未使用单元内存块编号所对应的单元内存块分配给这次请求,并将其状态修改为使用。然后将其下一个从未使用的单元内存块的编号存储到其内,以备下次使用。然后将分区内可用内存块数量索引的数值减1,完成步骤110。如此,处理结束。以上两种定位分区内单元内存块的方式,也可单独使用,并不限于。
如上所述,当***运行一段时间后,其会因程序中止而释放使用的单元内存块。这样在104步骤中,当其接到的是释放单元内存块的请求时,则进行其后续的步骤112和114。
在步骤112中,根据上述内容可知,每个单元内存块都有一个地址。假设这个释放出的单元内存块的起始地址为p Release Addr。通过将这个起始地址与各内存分区的起始地址进行比较,即可确定其所在的内存分区。若内存分区过多,可采用二分法进行查找。通过比较地址的方式,可确定其所属分区。当定位出释放出的内存块属于某个内存分区内时,则可根据公式(pReleaseAddr-pMemBaseN)/MBSn确定其编号。若发现该地址信息并不在划分出的内存区域内,则说明***程序错误,并报告错误。
在步骤114中,如果发现该分区内释放内存块索引的值为空值-1,则将该编号赋值给释放内存块索引存储,以便下次使用,并将释放内存块索引的空值变更。另外,还要将该释放的单元内存块的状态修改为未使用,以及将表示分区内可分配内存块数量索引的值加1。而若释放内存块索引的值不为空值-1时,则表明其内存储有可用的释放单元内存块的编号,那么就将该编号存储到释放内存块存储栈中,并同样将该释放单元内存块的状态修改为未使用以及表示分区内可分配内存块数量的数值加1。
进一步的,随着***的运行,***程序的运行及终止,单元内存块的分配流程和释放流程将会随需要不断被重复。
进一步的,在一个综合上述涉及的全部流程的实施方式中,首先进行***内存初始化过程,也就是利用本发明涉及的内存管理方法对***内存进行划分。
假设***需要运行的***程序为8个,首先采用操作***自身的内存分配及释放接口或是其它内存管理接口运行程序,得到***各个程序所需的动态内存的值分别为5K、6K、13K、22K、28K、33K、8K以及18K。
将这些数值分在三个数值范围内,分别是小于10K、10~25K以及25~35K。根据这些数值范围的最大值,确定该数值范围的单元值分别为10K、25K和35K。进一步的,处于第一数值范围中的需求有3个分别是5K、6K和8K;处于第二数值范围中的需求有3个,分别是13K、18K和22K;处于第三数值范围中的需求有2个分别是28K和33K。因此***程序所需的内存最大值Max Mem可以是10K*3+25K*3+35K*2=175K。
划分175K的***内存出来,按照上述数值范围的数量相应划分为三个内存分区,各内存分区的单元内存块的值和数量则分别对应为10K*3、25K*3以及35K*2。
进一步的,记录分配的内存的地址,其也是分区1的首地址,进而获得各分区的首地址。定义各分区的起始未使用内存块的编号为未使用内存块索引,其初始值为0,其指向该分区内的第一个单元内存块。定义释放内存块索引,其初始值为-1,用于存储因***程序终止而释放出的本分区内的单元内存块编号。记录各分区可用内存块数量索引分别为3、3及2。
***内存初始化完成后,开始进行分配操作流程。
当***第一次要求的分配内存为28K时,因为分区数量较少,寻找相应分区的方式可以是依次比较,直到发现其值是小于分区3的单元值。当然在分区较多的时候,可以采用二分法,先将其与中间分区的单元值进行比较,在这个实施方式中,即为第二分区的单元值25K进行比较,其大于它,则将其与第三分区的单元值35进行比较,发现其小于它,则选择第三分区进行单元内存块的分配。
由于是第一次分配内存,则可以是直接通过未使用内存块索引将其所指向的分区内第一个内存块分配给该程序。并将未使用内存块索引的数值加1,使其指向分区内第二个未使用的单元内存块,以便下次使用时分配。并将分区内表示可用内存块数量索引的数值减1,也就是由2变为1。
进一步的,在使用单元内存块的释放流程中,当分配出的占用第三分区第一个单元内存块的程序终止时,其将释放出其所占用的单元内存块。先确定该释放出的单元内存块的地址,然后将该地址依次与各分区的首地址进行比较,发现其位于第三分区内,并为第一内存块。检查释放内存块索引,发现其为初始值-1,则将此地址编号附值给它,并变更其初始值。然后将分区内表示可用内存块数量索引的数值加1,也就是由1变为2。
本发明涉及的可用于嵌入式***的内存管理方法,可有效的实现***对于内存实时性、可靠性及高效性方面的要求,进而提高了***的运行效率。同时采用针对程序特点的内存布局,通过简单的算法高效的对内存进行分配和回收,并可以检测是否发生内存错误。
Claims (10)
1.一种内存管理方法,所述内存被划分为若干个内存分区,每个内存分区被划分为若干个单元内存块,每个内存分区内的单元内存块的容量相同,而不同内存分区中的单元内存块的容量不同,其特征在于,所述方法包括:
步骤A、接收包括有内存需求容量的内存分配请求;
步骤B、找到其内的单元内存块的容量等于所述内存需求容量或大于所述内存需求容量且最小的内存分区;
步骤C、在所述找到的内存分区内找到使用状态为未使用的单元内存块,并将所述找到的未使用的单元内存块分配给所述内存分配请求,将被分配出的单元内存块的使用状态修改为已使用;
步骤D、接收用于释放指定单元内存块的内存释放请求;
步骤E、找到所述需要释放指定单元内存块所在的内存分区;
步骤F、在所述找到的内存分区内找到所述需要释放指定单元内存块,释放所述指定单元内存块,将被释放的单元内存块的使用状态修改为未使用。
2.根据权利要求1所述内存管理方法,其特征为:所述各内存分区都有各自的内存管理参数,所述内存管理参数包括可用内存块数量索引、未使用内存块索引、释放内存块索引以及释放内存块存储栈;其中可用内存块数量索引用于表明本内存分区内使用状态为未使用的可用于分配的单元内存块数量;未使用内存块索引则是用于存储本内存分区内从未使用的单元内存块编号;释放内存块索引以及释放内存块存储栈则都是用于存储本内存分区内释放的单元内存块编号,其中释放内存块存储栈则是在释放内存块索引存储了一个释放单元内存块之后,再进行其它的释放单元内存块编号的存储。
3.根据权利要求2所述内存管理方法,其特征为:在步骤B后,根据所述找到的内存分区的可用内存块数量索引判断所述找到的内存分区内是否还有可用单元内存块,如果有,则进入步骤C;如果否,则找到相邻的下一个内存分区,并再次根据找到的内存分区的可用内存块数量索引判断该内存分区内是否有可用单元内存块,如果有,则进入步骤C;否则继续重复上述步骤直到找到具有可用单元内存块的内存分区并进入步骤C;
所述步骤C包括:查看所述找到的内存分区的释放内存块索引是否为空,如果不为空,则将其内存储的释放单元内存块编号对应的单元内存块分配给所述内存分配请求,将分配出的单元内存块的状态修改为已使用,查看释放内存块存储栈内是否存储有释放单元内存块编号,如果有,则将释放内存块存储栈中存储的一个释放单元内存块的编号赋值给释放内存块索引,如果没有,则将释放内存块索引的值修改为空值,并将分区内可用内存块数量索引的数值减1;如果释放内存块索引为空值,则将未使用内存块索引内存储的从未使用的单元内存块的编号所对应的单元内存块分配给所述内存分配请求,然后将分区内下一个从未使用的单元内存块编号赋值给未使用内存块索引,将分配出的单元内存块的使用状态修改为已使用,并将可用内存块数量索引的数值减1;
所述步骤F包括:在所述找到的内存分区内找到所述需要释放的指定单元内存块,释放所述指定单元内存块,将被释放的单元内存块的使用状态修改为未使用,在释放内存块索引为空值时,将被释放的单元内存块的编号赋值给释放内存块索引;在释放内存块索引不为空值时,将被释放的单元内存块的编号存入释放内存块存储栈中,将所述内存分区内可用内存块数量索引数值加1。
4.根据权利要求1所述内存管理方法,其特征为:所述被划分为若干内存分区的内存的大小是根据预定运行的若干***程序所需内存的总需求大小计算得出,其为根据所述各程序的内存需求的值,将其分在至少两个数值范围内,以各数值范围的最大值为单元值以及落于其内的数值的数量两者的乘积,计算出***程序的内存总需求的最大值,然后根据这个最大值提供相应数值的内存区域。
5.根据权利要求1所述内存管理方法,其特征为:所述各内存分区的排列方式为按各内存分区的单元内存块的大小进行顺序排列。
6.根据权利要求1所述内存管理方法,其特征为:所述步骤B包括,根据二分法进行内存需求容量与所述各内存分区的单元内存块容量间的比较,其为在初始时,选择最小的单元内存块的值为起始值,最大单元内存块的值为终点值,然后选择处于两者之间的初始中间值与其进行比较;当其大于初始中间值时,则选择所述初始中间值为起始值,原所述终点值为终点值,然后与这两者之间的中间值进行比较;若其小于初始中间值时,则选择初始中间值为终点值,原所述起始值为起始值,然后与这两者间的中间值进行比较,依次类推,直到最终起始值和最终终点值之间只有一个数值为止,其为最终中间值,这时,若请求数值大于最终中间值,则选择数值为最终终点值的单元内存块所在的内存分区;若其小于,则选择数值为最终中间值的单元内存块所在的内存分区。
7.根据权利要求1所述内存管理方法,其特征为:其还包括记录所述各内存分区及其下各内存单元块的地址信息;所述步骤E包括,检查释放单元内存块的地址信息,将其起始地址信息与所述内存分区的起始地址进行比较,当两者比较一致时,则找到其所属内存分区。
8.根据权利要求1所述内存管理方法,其特征为:其还包括有以下步骤,在各内存分区内定义未使用内存块索引,其用于存储分区内第一个从未使用过的单元内存块的编号,当对应于其内存储的单元内存块编号的单元内存块被分配出去之后,其会存储分区内下一个未使用单元内存块的编号。
9.根据权利要求1所述内存管理方法,其特征为:其还包括有以下步骤,在各内存分区内定义释放内存块索引,用于存储属于该内存分区的,因***程序终止而释放出的单元内存块的编号;当需要分配单元内存块时,会先检查释放内存块索引内是否存储有释放的的单元内存块编号,若有,则将其对应的单元内存块分配给内存需求,然后将释放内存块索引的附值修改为空值。
10.根据权利要求1所述内存管理方法,其特征为:其还包括有以下步骤,在各内存分区内定义分区内可用内存块数量索引,用于记录该内存分区内的全部可用于分配出的单元内存块的数量,并在该分区内有内存块被分配出去之后,将该数值减1;在进行内存分区内单元存块分配时,当发现该分区内的用于记录该分区可用内存块数量的索引的数值为空值时,则选择其下一个内存分区进行内存块的分配。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2009100790574A CN101499034A (zh) | 2009-03-05 | 2009-03-05 | 内存管理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2009100790574A CN101499034A (zh) | 2009-03-05 | 2009-03-05 | 内存管理方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101499034A true CN101499034A (zh) | 2009-08-05 |
Family
ID=40946117
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA2009100790574A Pending CN101499034A (zh) | 2009-03-05 | 2009-03-05 | 内存管理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101499034A (zh) |
Cited By (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101853215A (zh) * | 2010-06-01 | 2010-10-06 | 恒生电子股份有限公司 | 一种内存分配方法及装置 |
CN101997897A (zh) * | 2009-08-14 | 2011-03-30 | 华为技术有限公司 | 一种块存储的方法、设备及*** |
CN101763058B (zh) * | 2009-11-24 | 2012-07-11 | 美的集团有限公司 | 一种用于家用电器微控制器的监测方法 |
CN102662996A (zh) * | 2012-03-15 | 2012-09-12 | 北京播思软件技术有限公司 | 一种数据快速分类的方法 |
CN103729300A (zh) * | 2013-12-25 | 2014-04-16 | 华为技术有限公司 | 非易失内存的管理方法和相关装置 |
CN103942150A (zh) * | 2014-04-01 | 2014-07-23 | 上海网达软件股份有限公司 | 一种用于实时流媒体传输***的内存管理方法 |
CN104182356A (zh) * | 2014-09-19 | 2014-12-03 | 深圳市茁壮网络股份有限公司 | 一种内存管理方法、装置及终端设备 |
CN105468461A (zh) * | 2016-01-15 | 2016-04-06 | 浪潮(北京)电子信息产业有限公司 | 一种内存分区的方法及*** |
CN106407130A (zh) * | 2016-09-12 | 2017-02-15 | 深圳易充新能源(深圳)有限公司 | 一种Nandflash内存数据管理的方法 |
CN106776356A (zh) * | 2016-11-28 | 2017-05-31 | 新疆熙菱信息技术股份有限公司 | 一种实现内存高速交互的***及方法 |
CN107168804A (zh) * | 2017-05-31 | 2017-09-15 | 上海联影医疗科技有限公司 | 一种内存资源管理方法与*** |
CN107391627A (zh) * | 2017-06-30 | 2017-11-24 | 北京奇虎科技有限公司 | 数据的内存占用分析方法、装置及服务器 |
CN107391257A (zh) * | 2017-06-30 | 2017-11-24 | 北京奇虎科技有限公司 | 业务所需内存容量的预估方法、装置及服务器 |
CN107463506A (zh) * | 2017-07-04 | 2017-12-12 | 积成电子股份有限公司 | 一种电能表的数据存储管理方法 |
CN108205472A (zh) * | 2017-08-15 | 2018-06-26 | 珠海市魅族科技有限公司 | 内存释放方法、释放装置、计算机装置以及可读存储介质 |
CN104021087B (zh) * | 2014-06-24 | 2018-07-17 | 上海众源网络有限公司 | 内存空间管理方法及*** |
CN108984310A (zh) * | 2018-08-21 | 2018-12-11 | 郑州云海信息技术有限公司 | 一种对象数据的构建方法和装置 |
CN109144718A (zh) * | 2018-07-06 | 2019-01-04 | 北京比特大陆科技有限公司 | 一种内存分配方法、内存释放方法以及相关设备 |
CN109309846A (zh) * | 2017-07-26 | 2019-02-05 | 深圳市中兴微电子技术有限公司 | 一种基于可信任环境的视频安全播放***及方法 |
CN109445724A (zh) * | 2018-10-12 | 2019-03-08 | 森大(深圳)技术有限公司 | 打印内存管理方法、装置及设备 |
CN109597323A (zh) * | 2018-11-09 | 2019-04-09 | 泰州市柯普尼通讯设备有限公司 | 船舶航海卫星通讯天线分级式缓存***及其使用方法 |
CN109656836A (zh) * | 2018-12-24 | 2019-04-19 | 新华三技术有限公司 | 一种数据处理方法及装置 |
CN110888822A (zh) * | 2019-12-03 | 2020-03-17 | 北京小米智能科技有限公司 | 内存处理方法、装置及存储介质 |
CN111427707A (zh) * | 2020-03-25 | 2020-07-17 | 北京左江科技股份有限公司 | 一种基于共享内存池的ipc通信方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020085433A1 (en) * | 2000-12-07 | 2002-07-04 | Nobuaki Tomori | Data management system and data management method |
CN1963788A (zh) * | 2005-11-08 | 2007-05-16 | 中兴通讯股份有限公司 | 一种内存管理方法 |
CN101140531A (zh) * | 2007-10-10 | 2008-03-12 | 中兴通讯股份有限公司 | 快速申请内存的方法 |
CN101149703A (zh) * | 2007-10-10 | 2008-03-26 | 中兴通讯股份有限公司 | 一种固定内存的管理方法 |
JP2008217134A (ja) * | 2007-02-28 | 2008-09-18 | Univ Waseda | メモリ管理方法、情報処理装置、プログラムの作成方法及びプログラム |
CN101276334A (zh) * | 2007-03-29 | 2008-10-01 | 上海新跃仪表厂 | 一种快速检索数据的链表实现方法 |
-
2009
- 2009-03-05 CN CNA2009100790574A patent/CN101499034A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020085433A1 (en) * | 2000-12-07 | 2002-07-04 | Nobuaki Tomori | Data management system and data management method |
CN1963788A (zh) * | 2005-11-08 | 2007-05-16 | 中兴通讯股份有限公司 | 一种内存管理方法 |
JP2008217134A (ja) * | 2007-02-28 | 2008-09-18 | Univ Waseda | メモリ管理方法、情報処理装置、プログラムの作成方法及びプログラム |
CN101276334A (zh) * | 2007-03-29 | 2008-10-01 | 上海新跃仪表厂 | 一种快速检索数据的链表实现方法 |
CN101140531A (zh) * | 2007-10-10 | 2008-03-12 | 中兴通讯股份有限公司 | 快速申请内存的方法 |
CN101149703A (zh) * | 2007-10-10 | 2008-03-26 | 中兴通讯股份有限公司 | 一种固定内存的管理方法 |
Cited By (32)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101997897A (zh) * | 2009-08-14 | 2011-03-30 | 华为技术有限公司 | 一种块存储的方法、设备及*** |
CN101763058B (zh) * | 2009-11-24 | 2012-07-11 | 美的集团有限公司 | 一种用于家用电器微控制器的监测方法 |
CN101853215A (zh) * | 2010-06-01 | 2010-10-06 | 恒生电子股份有限公司 | 一种内存分配方法及装置 |
CN102662996A (zh) * | 2012-03-15 | 2012-09-12 | 北京播思软件技术有限公司 | 一种数据快速分类的方法 |
CN103729300B (zh) * | 2013-12-25 | 2017-11-28 | 华为技术有限公司 | 非易失内存的管理方法和相关装置 |
CN103729300A (zh) * | 2013-12-25 | 2014-04-16 | 华为技术有限公司 | 非易失内存的管理方法和相关装置 |
CN103942150A (zh) * | 2014-04-01 | 2014-07-23 | 上海网达软件股份有限公司 | 一种用于实时流媒体传输***的内存管理方法 |
CN104021087B (zh) * | 2014-06-24 | 2018-07-17 | 上海众源网络有限公司 | 内存空间管理方法及*** |
CN104182356B (zh) * | 2014-09-19 | 2017-06-27 | 深圳市茁壮网络股份有限公司 | 一种内存管理方法、装置及终端设备 |
CN104182356A (zh) * | 2014-09-19 | 2014-12-03 | 深圳市茁壮网络股份有限公司 | 一种内存管理方法、装置及终端设备 |
CN105468461A (zh) * | 2016-01-15 | 2016-04-06 | 浪潮(北京)电子信息产业有限公司 | 一种内存分区的方法及*** |
CN106407130A (zh) * | 2016-09-12 | 2017-02-15 | 深圳易充新能源(深圳)有限公司 | 一种Nandflash内存数据管理的方法 |
CN106776356A (zh) * | 2016-11-28 | 2017-05-31 | 新疆熙菱信息技术股份有限公司 | 一种实现内存高速交互的***及方法 |
CN107168804A (zh) * | 2017-05-31 | 2017-09-15 | 上海联影医疗科技有限公司 | 一种内存资源管理方法与*** |
CN107391627A (zh) * | 2017-06-30 | 2017-11-24 | 北京奇虎科技有限公司 | 数据的内存占用分析方法、装置及服务器 |
CN107391257A (zh) * | 2017-06-30 | 2017-11-24 | 北京奇虎科技有限公司 | 业务所需内存容量的预估方法、装置及服务器 |
CN107391627B (zh) * | 2017-06-30 | 2020-11-03 | 北京奇虎科技有限公司 | 数据的内存占用分析方法、装置及服务器 |
CN107391257B (zh) * | 2017-06-30 | 2020-10-13 | 北京奇虎科技有限公司 | 业务所需内存容量的预估方法、装置及服务器 |
CN107463506B (zh) * | 2017-07-04 | 2020-07-31 | 积成电子股份有限公司 | 一种电能表的数据存储管理方法 |
CN107463506A (zh) * | 2017-07-04 | 2017-12-12 | 积成电子股份有限公司 | 一种电能表的数据存储管理方法 |
CN109309846A (zh) * | 2017-07-26 | 2019-02-05 | 深圳市中兴微电子技术有限公司 | 一种基于可信任环境的视频安全播放***及方法 |
CN108205472A (zh) * | 2017-08-15 | 2018-06-26 | 珠海市魅族科技有限公司 | 内存释放方法、释放装置、计算机装置以及可读存储介质 |
CN108205472B (zh) * | 2017-08-15 | 2021-11-05 | 珠海市魅族科技有限公司 | 内存释放方法、释放装置、计算机装置以及可读存储介质 |
CN109144718A (zh) * | 2018-07-06 | 2019-01-04 | 北京比特大陆科技有限公司 | 一种内存分配方法、内存释放方法以及相关设备 |
CN108984310A (zh) * | 2018-08-21 | 2018-12-11 | 郑州云海信息技术有限公司 | 一种对象数据的构建方法和装置 |
CN109445724A (zh) * | 2018-10-12 | 2019-03-08 | 森大(深圳)技术有限公司 | 打印内存管理方法、装置及设备 |
CN109445724B (zh) * | 2018-10-12 | 2022-03-01 | 森大(深圳)技术有限公司 | 打印内存管理方法、装置及设备 |
CN109597323A (zh) * | 2018-11-09 | 2019-04-09 | 泰州市柯普尼通讯设备有限公司 | 船舶航海卫星通讯天线分级式缓存***及其使用方法 |
CN109656836A (zh) * | 2018-12-24 | 2019-04-19 | 新华三技术有限公司 | 一种数据处理方法及装置 |
CN110888822A (zh) * | 2019-12-03 | 2020-03-17 | 北京小米智能科技有限公司 | 内存处理方法、装置及存储介质 |
CN111427707A (zh) * | 2020-03-25 | 2020-07-17 | 北京左江科技股份有限公司 | 一种基于共享内存池的ipc通信方法 |
CN111427707B (zh) * | 2020-03-25 | 2024-02-06 | 北京左江科技股份有限公司 | 一种基于共享内存池的ipc通信方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101499034A (zh) | 内存管理方法 | |
CN107517282B (zh) | 一种室内机地址分配方法、存储介质及多联机*** | |
CN100382048C (zh) | 一种内存管理方法 | |
US7099814B2 (en) | I/O velocity projection for bridge attached channel | |
CN103384877A (zh) | 包括闪存的存储***和存储控制方法 | |
EP2924554A1 (en) | Storage management apparatus, performance adjusting method, and performance adjusting program | |
EP1999596A2 (en) | Method and apparatus for dynamic resizing of cache partitions based on the execution phase of tasks | |
CN107783812B (zh) | 虚拟机内存管理方法及装置 | |
CN108881512A (zh) | Ctdb的虚拟ip均衡分配方法、装置、设备及介质 | |
CN111309644B (zh) | 一种内存分配方法、装置和计算机可读存储介质 | |
CN102968378A (zh) | 一种内存分配和释放的方法、装置及*** | |
CN101488919B (zh) | 存储地址分配方法和装置 | |
CN112256433A (zh) | 基于Kafka集群的分区迁移方法和装置 | |
CN108920105A (zh) | 基于社区结构的图数据分布式存储方法及装置 | |
CN107733681B (zh) | 一种调度方案配置方法和装置 | |
CN106155910A (zh) | 一种实现内存访问的方法、装置和*** | |
US20120151175A1 (en) | Memory apparatus for collective volume memory and method for managing metadata thereof | |
CN110716698A (zh) | 数据分片副本部署方法及装置 | |
JP5782962B2 (ja) | Raidグループ制御装置 | |
CN101000534A (zh) | 存储器控制器 | |
CN114625719A (zh) | 一种基于移动滤波框架的动态集合管理方法和*** | |
CN105276762B (zh) | 控制器跳线帽故障确定方法及空调控制器 | |
CN109976662A (zh) | 数据存储方法、装置及分布式存储*** | |
CN110389973B (zh) | 一种异构分布式环境中的并行离群点检测方法 | |
CN113742417A (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 | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20090805 |