CN112506813A - 一种内存管理方法和系统 - Google Patents
一种内存管理方法和系统 Download PDFInfo
- Publication number
- CN112506813A CN112506813A CN202011594928.9A CN202011594928A CN112506813A CN 112506813 A CN112506813 A CN 112506813A CN 202011594928 A CN202011594928 A CN 202011594928A CN 112506813 A CN112506813 A CN 112506813A
- Authority
- CN
- China
- Prior art keywords
- memory
- addr
- memory block
- idle
- index number
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0804—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with main memory updating
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0608—Saving storage space on storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种内存管理方法和系统,将系统连续内存分为N份容量相等的内存块,表示为ADDR[N],创建管理内存,表示为数组M[N],通过数组M[N]的取值对内存块的状态进行判别,将ADDR[v]空闲内存块的索引号定义为head,从而进行内存块空闲申请及占用释放。本发明通过定义空闲内存索引号head和创建管理内存及数组M[N],使M[N]的取值对应内存块的状态,并根据当前空闲内存的索引号head的值,快速的找到下一空闲内存位置,方便进行内存申请或释放,避免遍历查找,提升了内存管理的效率。
Description
技术领域
本发明涉及系统内存管理技术领域,具体涉及一种内存管理方法和系统。
背景技术
内存是嵌入式系统的重要资源,合理利用和高效管理内存对于提升系统性能有着至关重要的作用。
目前,内存管理的方式是通过创建一个管理内存来进行内存空闲、占用等操作。内存管理采用的方法有动态内存管理方法,主要涉及内存的申请和释放,通常通过链表方法来实现,利用链表将空闲内存块排列,当进行内存申请时,从链表的头部开始进行遍历查找空闲内存块,直到查找到空闲合适的内存块;
当进行内存释放时,链表方法将已经释放的内存块即空闲内存块放在链表的尾部。另一方面通过数组的方式,在已知索引号的前提下对内存进行查询,虽然上述方法在使用时查询准确度高,但是申请空闲内存块时需要遍历查找。
如专利文献CN101382916A公开的一种嵌入式系统内存管理方法,需要遍历内存池,查找地址连续且均处于空闲状态的内存块;这种方法在使用时内存管理效率较低,影响系统性能。
在嵌入式系统中,系统在正常运行时需要频繁地对内存进行申请和释放,且内存管理采用链表和数组的应用比较广泛,但是需要对内存块的状态进行遍历查找,导致效率较低,影响系统性能;因此如何设计一种内存管理方法和系统,能够提高内存申请和释放的效率是目前急需解决的问题。
发明内容
本发明为解决现有嵌入式内存管理方法需要遍历查找从而影响系统内存使用效率的问题,提供了一种内存管理方法和系统,本发明通过定义空闲内存索引号head和创建管理内存及数组M[N],使M[N]的取值对应内存块的状态,并根据当前空闲内存的索引号head的值,快速的找到下一空闲内存,方便进行内存申请或释放,避免遍历查找,提升了内存管理的效率。
一方面,本发明提供了一种内存管理方法,所述方法包括以下步骤:
步骤1初始化阶段:
步骤1.1:将系统连续内存分为N份容量相等的内存块,表示为ADDR[N],所述内存块的索引号记作v,v的范围为0~N-1;
步骤1.2:创建用于管理N份所述内存块的管理内存,所述管理内存表示为M[N],对M[N]进行初始值的赋值:M[0]=1,M[1]=2,M[2]=3,M[3]=4,…M[v]=v+1,……M[N-1]=N;
步骤1.3:通过M[N]的取值对内存块的状态进行判别;
当M[v]!=v,定义所述内存块为ADDR[v]空闲内存块,且M[v]的取值为下一个ADDR[v]空闲内存块的索引号;
当M[v]=v,定义所述内存块为ADDR[v]被占用内存块;
步骤1.4:将ADDR[v]空闲内存块的索引号定义为head,并将head初始化为0;
步骤2申请ADDR[v]空闲内存块阶段:
将ADDR[v]空闲内存块的索引号head的当前值v作为ADDR[v]空闲内存块的索引号,用数组M[v]的取值对索引号head进行赋值,更新ADDR[v]空闲内存块的索引号head,即:v=head,head=M[v],M[v]=v;
ADDR[v]空闲内存块转换为ADDR[v]被占用内存块。
进一步地,所述方法还包括步骤3释放ADDR[v]被占用内存块阶段:
步骤3.1:判断数组M[v]的取值;
若M[v]=v,表示ADDR[v]被占用内存块可进行释放;
若M[v]!=v,表示ADDR[v]空闲内存块不进行释放;
步骤3.2:将与索引号为v的ADDR[v]被占用内存块对应的数组M[v]的取值修改为ADDR[v]空闲内存块的索引号head的当前值;
用ADDR[v]被占用内存块的索引号v对ADDR[v]空闲内存块的索引号head进行更新赋值;
索引号为v的ADDR[v]被占用内存块释放。
进一步地,所述管理内存的大小A表示为:
A=N*K (1);
其中,K表示每个管理内存块的字节大小,N为索引号v的数量,K的取值范围与N相关,K*8≥log2N。
进一步地,所述步骤2还包括连续申请ADDR[v]空闲内存块的阶段:
循环执行申请ADDR[v]空闲内存块过程,依次返回ADDR[v]被占用内存块的索引号,并更新ADDR[v]空闲内存块的索引号head的当前值。
进一步地,所述步骤3还包括释放多个ADDR[v]被占用内存块的阶段:
循环ADDR[v]被占用内存块释放过程,依次根据ADDR[v]被占用内存块的索引号v更新数组M[v]以及ADDR[v]空闲内存块的索引号head的当前值。
另一方面,本发明实施例提供一种内存管理系统,所述内存管理系统包括内存划分模块、内存管理模块、内存状态定义模块、空闲内存定义模块和空闲内存申请模块;
所述内存划分模块用于将系统连续内存分为N份容量相等的内存块,表示为ADDR[N],所述内存块的索引号记作v,v的范围为0~N-1;
所述内存管理模块用于创建管理N份所述内存块的管理内存,所述管理内存表示为M[N],对M[N]进行初始值的赋值:M[0]=1,M[1]=2,M[2]=3,M[3]=4,…M[v]=v+1,……M[N-1]=N;
所述状态定义模块用于通过M[N]的取值对内存块的状态进行判别,当M[v]!=v,定义所述内存块为ADDR[v]空闲内存块,且M[v]的取值为下一个ADDR[v]空闲内存块的索引号,当M[v]=v,定义所述内存块为ADDR[v]被占用内存块;
所述空闲内存定义模块将ADDR[v]空闲内存块的索引号定义为head,并将head初始化为0;
所述空闲内存申请模块用于将ADDR[v]空闲内存块的索引号head的当前值v作为ADDR[v]空闲内存块的索引号,用数组M[v]的取值对索引号head进行赋值,更新ADDR[v]空闲内存块的索引号head,即:v=head,head=M[v],M[v]=v,ADDR[v]空闲内存块转换为ADDR[v]被占用内存块。
进一步地,所述内存管理系统还包括释放状态判断模块和占用内存释放模块;
所述释放状态判断模块用于根据内存管理模块取值判断内存块占用状态,若M[v]=v,表示ADDR[v]被占用内存块可进行释放,若M[v]!=v,表示ADDR[v]空闲内存块不进行释放;
所述占用内存释放模块用于将与索引号为v的ADDR[v]被占用内存块对应的数组M[v]的取值修改为ADDR[v]空闲内存块的索引号head的当前值,用ADDR[v]被占用内存块的索引号v对ADDR[v]空闲内存块的索引号head进行更新赋值,索引号为v的ADDR[v]被占用内存块释放。
进一步地,所述管理内存的大小A表示为:
A=N*K (1);
其中,K表示每个管理内存块的字节大小,N为索引号v的数量,K的取值范围与N相关,K*8≥log2N。
进一步地,所述内存管理系统还包括第一循环执行单元,所述第一循环执行单元用于循环执行申请ADDR[v]空闲内存块过程,依次返回ADDR[v]被占用内存块的索引号,并更新ADDR[v]空闲内存块的索引号head的当前值。
进一步地,所述内存管理系统还包括第二循环执行单元,所述第二循环执行单元用于循环ADDR[v]被占用内存块释放过程,依次根据ADDR[v]被占用内存块的索引号v更新数组M[v]以及ADDR[v]空闲内存块的索引号head的当前值。
通过上述技术方案,本发明的有益效果为:
本发明通过定义空闲内存索引号head和创建管理内存及数组M[N],使M[N]的取值对应内存块空闲或占用的状态,并根据当前ADDR[v]空闲内存块的索引号head的值,快速的获取下一个ADDR[v]空闲内存块的位置,方便进行内存申请或释放,不需要进行遍历查找,提升了内存管理的效率。
当需要对ADDR[v]空闲内存块进行申请时,通过ADDR[v]空闲内存块的索引号head快速查找内存块中的空闲内存,并对其进行占用申请,当上述ADDR[v]空闲内存块被占用后,所述索引号head根据M[N]的值进行更新生成下一空闲内存索引号head,再次进行新的ADDR[v]空闲内存块申请时,无需遍历查找内存,可直接根据索引号head值进行ADDR[v]空闲内存块查询。
进行ADDR[v]被占用内存块的释放时,根据ADDR[v]被占用内存块的索引号v,并根据当前ADDR[v]空闲内存块的索引号head的值改变数组M[N]的取值,进行ADDR[v]被占用内存块的释放,且通过更新后的索引号head能够快速查询新的ADDR[v]空闲内存块的位置,以便继续进行内存块的释放或占用,从而提升内存管理的效率。
附图说明
图1示出本发明一种内存管理方法的流程图;
图2示出本发明一种内存管理系统的系统结构图;
图3示出本发明一种内存管理方法中内存初始化示意图;
图4示出本发明一种内存管理方法中申请空闲内存块示意图之一;
图5示出本发明一种内存管理方法中申请空闲内存块示意图之二;
图6示出本发明一种内存管理方法中释放占用内存块示意图之一;
图7示出本发明一种内存管理方法中释放占用内存块示意图之二。
附图标号:2为内存划分模块,3为内存管理模块,4为状态定义模块,5为空闲内存定义模块,6为空闲内存申请模块,7为释放状态判断模块,8为占用内存释放模块,9为第一循环执行单元,10为第二循环执行单元。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例1
如图1所示,本发明实施例提供的一种内存管理方法,所述方法包括以下步骤:
步骤1初始化阶段:
步骤1.1:将系统连续内存分为N份容量相等的内存块,表示为ADDR[N],所述内存块的索引号记作v,v的范围为0~N-1;
步骤1.2:创建用于管理N份所述内存块的管理内存,所述管理内存表示为M[N],对M[N]进行初始值的赋值:M[0]=1,M[1]=2,M[2]=3,M[3]=4,…M[v]=v+1,……M[N-1]=N;
步骤1.3:通过M[N]的取值对内存块的状态进行判别;
当M[v]!=v,定义所述内存块为ADDR[v]空闲内存块,且M[v]的取值为下一个ADDR[v]空闲内存块的索引号;
当M[v]=v,定义所述内存块为ADDR[v]被占用内存块;
步骤1.4:将ADDR[v]空闲内存块的索引号定义为head,并将head初始化为0;
步骤2申请ADDR[v]空闲内存块阶段:
将ADDR[v]空闲内存块的索引号head的当前值v作为ADDR[v]空闲内存块的索引号,用数组M[v]的取值对索引号head进行赋值,更新ADDR[v]空闲内存块的索引号head,即:v=head,head=M[v],M[v]=v;
ADDR[v]空闲内存块转换为ADDR[v]被占用内存块。
通过定义空闲内存索引号head和创建管理内存及数组M[N],使M[N]的取值对应内存块空闲或占用的状态,并根据当前ADDR[v]空闲内存块的索引号head的值,快速的获取下一个ADDR[v]空闲内存块的位置,方便进行内存申请,不需要进行遍历查找,提升了内存管理的效率。
实施例2
在上述实施例1的基础上,本发明实施例与上述实施例的不同之处在于,本方法还包括步骤3为了便于对ADDR[v]被占用内存块进行释放,所述步骤3包括释放ADDR[v]被占用内存块阶段,具体为:
步骤3.1:判断数组M[v]的取值;
若M[v]=v,表示ADDR[v]被占用内存块可进行释放;
若M[v]!=v,表示ADDR[v]空闲内存块不进行释放;
步骤3.2:将与索引号为v的ADDR[v]被占用内存块对应的数组M[v]的取值修改为ADDR[v]空闲内存块的索引号head的当前值;
用ADDR[v]被占用内存块的索引号v对ADDR[v]空闲内存块的索引号head进行更新赋值;
索引号为v的ADDR[v]被占用内存块释放。
实施例3
在本实施例中所述管理内存的大小A表示为:
A=N*K (1);
其中,K表示每个管理内存块的字节大小,N为索引号v的数量,K的取值范围与N相关,K*8≥log2N。
实施例4
在上述实施例1的基础上,本发明实施例与上述实施例的不同之处在于,为保证连续ADDR[v]空闲内存块有序申请,对实施例1所述步骤2进行优化,所述步骤2还包括连续申请ADDR[v]空闲内存块的阶段,具体为:
循环执行申请ADDR[v]空闲内存块过程,依次返回ADDR[v]被占用内存块的索引号,并更新ADDR[v]空闲内存块的索引号head的当前值。
通过连续申请ADDR[v]空闲内存块的阶段确保内存空间被充分利用,从而提高内存的应用性能。
实施例5
在上述实施例2的基础上,本发明实施例与上述实施例的不同之处在于,为保证连续ADDR[v]被占用内存块有序释放,对实施例2中步骤3进行优化,所述步骤3还包括释放多个ADDR[v]被占用内存块的阶段:
循环ADDR[v]被占用内存块释放过程,依次根据ADDR[v]被占用内存块的索引号v更新数组M[v]以及ADDR[v]空闲内存块的索引号head的当前值。
在释放多个ADDR[v]被占用内存块的阶段将ADDR[v]空闲内存块的索引号head的当前值进行更新,便于对ADDR[v]空闲内存块申请时,快速查询到ADDR[v]空闲内存块位置,避免遍历查找,提高内存申请效率。
实施例6
对应上述的一种内存管理方法,如图2所示,本发明实施例提供一种内存管理系统,所述系统包括:内存划分模块2、内存管理模块3、内存状态定义模块4、空闲内存定义模块5和空闲内存申请模块6;
所述内存划分模块2用于将系统连续内存分为N份容量相等的内存块,表示为ADDR[N],所述内存块的索引号记作v,v的范围为0~N-1;
所述内存管理模块3用于创建管理N份所述内存块的管理内存,所述管理内存表示为M[N],对M[N]进行初始值的赋值:M[0]=1,M[1]=2,M[2]=3,M[3]=4,…M[v]=v+1,……M[N-1]=N;
所述状态定义模块4用于通过M[N]的取值对内存块的状态进行判别,当M[v]!=v,定义所述内存块为ADDR[v]空闲内存块,且M[v]的取值为下一个ADDR[v]空闲内存块的索引号,当M[v]=v,定义所述内存块为ADDR[v]被占用内存块;
所述空闲内存定义模块5将ADDR[v]空闲内存块的索引号定义为head,并将head初始化为0;
所述空闲内存申请模块6用于将ADDR[v]空闲内存块的索引号head的当前值v作为ADDR[v]空闲内存块的索引号,用数组M[v]的取值对索引号head进行赋值,更新ADDR[v]空闲内存块的索引号head,即:v=head,head=M[v],M[v]=v,ADDR[v]空闲内存块转换为ADDR[v]被占用内存块。
作为一种可实施方式,所述内存管理系统还包括释放状态判断模块7和占用内存释放模块8;
所述释放状态判断模块7用于根据内存管理模块3取值判断内存块占用状态,若M[v]=v,表示ADDR[v]被占用内存块可进行释放,若M[v]!=v,表示ADDR[v]空闲内存块不进行释放;
所述占用内存释放模块8用于将与索引号为v的ADDR[v]被占用内存块对应的数组M[v]的取值修改为ADDR[v]空闲内存块的索引号head的当前值,用ADDR[v]被占用内存块的索引号v对ADDR[v]空闲内存块的索引号head进行更新赋值,索引号为v的ADDR[v]被占用内存块释放。
作为一种可实施方式,所述管理内存的大小A表示为:
A=N*K (1);
其中,K表示每个管理内存块的字节大小,N为索引号v的数量,K的取值范围与N相关,K*8≥log2N。
作为一种可实施方式,所述内存管理系统还包括第一循环执行单元9,所述第一循环执行单元9用于循环执行申请ADDR[v]空闲内存块过程,依次返回ADDR[v]被占用内存块的索引号,并更新ADDR[v]空闲内存块的索引号head的当前值。
作为一种可实施方式,所述内存管理系统还包括第二循环执行单元10,所述第二循环执行单元10用于循环ADDR[v]被占用内存块释放过程,依次根据ADDR[v]被占用内存块的索引号v更新数组M[v]以及ADDR[v]空闲内存块的索引号head的当前值。
结合图3~图7,对内存管理系统及方法进行说明,在步骤1初始化阶段,如图3所示,其中数组M[N]的赋值分别为:M[0]=1,M[1]=2,M[2]=3,M[3]=4,…M[v]=v+1,……M[N-1]=N,此时内存块均为ADDR[v]空闲内存块,ADDR[v]空闲内存块的索引号head=0;
步骤2申请ADDR[v]空闲内存块阶段,如图4~5所示,当申请第1个ADDR[v]空闲内存块时,v=head=0,head=M[0]=1,M[0]=0,此时索引号v为0的内存块被占用,新的head值为1,表明下一个空闲内存块的ADDR[v]索引号为1(即内存块中第2块为ADDR[v]空闲内存块);
接着在内存块为1个ADDR[v]被占用内存块的情况下,再连续申请5个ADDR[v]空闲内存块,申请时,ADDR[v]空闲内存块依次被占用,生成ADDR[v]被占用内存块,ADDR[v]被占用内存块索引号为v=1、2、3、4、5;数组M[1]=1,M[2]=2,M[3]=3,M[4]=4,M[5]=5,head=M[5]=6最终5个ADDR[v]空闲内存块均被占用,此时head的新值为6,表明下一个空闲内存块的ADDR[v]索引号为6(即内存块中第7块为ADDR[v]空闲内存块);通过该内存申请的方式,根据head的值和数组M[N]能够快速的获知下一个ADDR[v]空闲内存块的索引号,以便继续申请空闲内存或进行内存释放,提升内存管理的效率。
步骤3释放ADDR[v]被占用内存块阶段,如图6~7所示,在连续6个内存块为ADDR[v]被占用内存块时,选择索引号v为2的ADDR[v]被占用内存块进行释放,其中M[2]=head=6,head=2,表示索引号v为2的ADDR[v]被占用内存块已释放,下一个空闲内存块的ADDR[v]索引号为2(即内存块中第3块为ADDR[v]空闲内存块);
在释放索引号v为2的ADDR[v]被占用内存块后,释放另一索引号v为4的ADDR[v]被占用内存块时,M[4]=head=2,head=4,表示索引号v为4的ADDR[v]被占用内存块已释放,下一个空闲内存块的ADDR[v]索引号为4(即内存块中第5块为ADDR[v]空闲内存块);
此时连续6个内存块中有两个ADDR[v]空闲内存块(第3块和第5块),其索引号分别为head为2和head为4,若继续进行ADDR[v]空闲内存块申请,则申请的次序为:
首先申请索引号head为4的ADDR[v]空闲内存块,再申请索引号head为2的ADDR[v]空闲内存块,之后再申请索引号head为6到N-1的ADDR[v]空闲内存块。
通过步骤3所述ADDR[v]被占用内存块释放的方法,选择要释放的ADDR[v]被占用内存块的索引号v,并根据当前ADDR[v]空闲内存块的索引号head的值改变数组M[N]的取值,进行ADDR[v]被占用内存块的释放,且通过更新后的索引号head能够快速查询新的ADDR[v]空闲内存块的位置,以便继续进行内存块的释放或占用,从而提升内存管理的效率。
以上所述之实施例,只是本发明的较佳实施例而已,并非限制本发明的实施范围,故凡依本发明专利范围所述的构造、特征及原理所做的等效变化或修饰,均应包括于本发明申请专利范围内。
Claims (10)
1.一种内存管理方法,其特征在于,所述方法包括:
步骤1初始化阶段:
步骤1.1:将系统连续内存分为N份容量相等的内存块,表示为ADDR[N],所述内存块的索引号记作v,v的范围为0~N-1;
步骤1.2:创建用于管理N份所述内存块的管理内存,所述管理内存表示为M[N],对M[N]进行初始值的赋值:M[0]=1,M[1]=2,M[2]=3,M[3]=4,…M[v]=v+1,……M[N-1]=N;
步骤1.3:通过M[N]的取值对内存块的状态进行判别;
当M[v]!=v,定义所述内存块为ADDR[v]空闲内存块,且M[v]的取值为下一个ADDR[v]空闲内存块的索引号;
当M[v]=v,定义所述内存块为ADDR[v]被占用内存块;
步骤1.4:将ADDR[v]空闲内存块的索引号定义为head,并将head初始化为0;
步骤2申请ADDR[v]空闲内存块阶段:
将ADDR[v]空闲内存块的索引号head的当前值v作为ADDR[v]空闲内存块的索引号,用数组M[v]的取值对索引号head进行赋值,更新ADDR[v]空闲内存块的索引号head,即:v=head,head=M[v],M[v]=v;
ADDR[v]空闲内存块转换为ADDR[v]被占用内存块。
2.根据权利要求1所述的内存管理方法,其特征在于,所述方法还包括步骤3释放ADDR[v]被占用内存块阶段:
步骤3.1:判断数组M[v]的取值;
若M[v]=v,表示ADDR[v]被占用内存块可进行释放;
若M[v]!=v,表示ADDR[v]空闲内存块不进行释放;
步骤3.2:将与索引号为v的ADDR[v]被占用内存块对应的数组M[v]的取值修改为ADDR[v]空闲内存块的索引号head的当前值;
用ADDR[v]被占用内存块的索引号v对ADDR[v]空闲内存块的索引号head进行更新赋值;
索引号为v的ADDR[v]被占用内存块释放。
3.根据权利要求1所述的内存管理方法,其特征在于,所述管理内存的大小A表示为:
A=N*K (1);
其中,K表示每个管理内存块的字节大小,N为索引号v的数量,K的取值范围与N相关,K*8≥log2N。
4.根据权利要求1所述的内存管理方法,其特征在于,所述步骤2还包括连续申请ADDR[v]空闲内存块的阶段:
循环执行申请ADDR[v]空闲内存块过程,依次返回ADDR[v]被占用内存块的索引号,并更新ADDR[v]空闲内存块的索引号head的当前值。
5.根据权利要求2所述的内存管理方法,其特征在于,所述步骤3还包括释放多个ADDR[v]被占用内存块的阶段:
循环ADDR[v]被占用内存块释放过程,依次根据ADDR[v]被占用内存块的索引号v更新数组M[v]以及ADDR[v]空闲内存块的索引号head的当前值。
6.一种内存管理系统,其特征在于,所述内存管理系统包括内存划分模块(2)、内存管理模块(3)、内存状态定义模块(4)、空闲内存定义模块(5)和空闲内存申请模块(6);
所述内存划分模块(2)用于将系统连续内存分为N份容量相等的内存块,表示为ADDR[N],所述内存块的索引号记作v,v的范围为0~N-1;
所述内存管理模块(3)用于创建管理N份所述内存块的管理内存,所述管理内存表示为M[N],对M[N]进行初始值的赋值:M[0]=1,M[1]=2,M[2]=3,M[3]=4,…M[v]=v+1,……M[N-1]=N;
所述状态定义模块(4)用于通过M[N]的取值对内存块的状态进行判别,当M[v]!=v,定义所述内存块为ADDR[v]空闲内存块,且M[v]的取值为下一个ADDR[v]空闲内存块的索引号,当M[v]=v,定义所述内存块为ADDR[v]被占用内存块;
所述空闲内存定义模块(5)将ADDR[v]空闲内存块的索引号定义为head,并将head初始化为0;
所述空闲内存申请模块(6)用于将ADDR[v]空闲内存块的索引号head的当前值v作为ADDR[v]空闲内存块的索引号,用数组M[v]的取值对索引号head进行赋值,更新ADDR[v]空闲内存块的索引号head,即:v=head,head=M[v],M[v]=v,ADDR[v]空闲内存块转换为ADDR[v]被占用内存块。
7.根据权利要求6所述的内存管理系统,其特征在于,所述内存管理系统还包括释放状态判断模块(7)和占用内存释放模块(8);
所述释放状态判断模块(7)用于根据内存管理模块(3)取值判断内存块占用状态,若M[v]=v,表示ADDR[v]被占用内存块可进行释放,若M[v]!=v,表示ADDR[v]空闲内存块不进行释放;
所述占用内存释放模块(8)用于将与索引号为v的ADDR[v]被占用内存块对应的数组M[v]的取值修改为ADDR[v]空闲内存块的索引号head的当前值,用ADDR[v]被占用内存块的索引号v对ADDR[v]空闲内存块的索引号head进行更新赋值,索引号为v的ADDR[v]被占用内存块释放。
8.根据权利要求6所述的内存管理系统,其特征在于,所述管理内存的大小A表示为:
A=N*K (1);
其中,K表示每个管理内存块的字节大小,N为索引号v的数量,K的取值范围与N相关,K*8≥log2N。
9.根据权利要求6所述的内存管理系统,其特征在于,所述内存管理系统还包括第一循环执行单元(9),所述第一循环执行单元(9)用于循环执行申请ADDR[v]空闲内存块过程,依次返回ADDR[v]被占用内存块的索引号,并更新ADDR[v]空闲内存块的索引号head的当前值。
10.根据权利要求7所述的内存管理系统,其特征在于,所述内存管理系统还包括第二循环执行单元(10),所述第二循环执行单元(10)用于循环ADDR[v]被占用内存块释放过程,依次根据ADDR[v]被占用内存块的索引号v更新数组M[v]以及ADDR[v]空闲内存块的索引号head的当前值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011594928.9A CN112506813B (zh) | 2020-12-29 | 2020-12-29 | 一种内存管理方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011594928.9A CN112506813B (zh) | 2020-12-29 | 2020-12-29 | 一种内存管理方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112506813A true CN112506813A (zh) | 2021-03-16 |
CN112506813B CN112506813B (zh) | 2022-04-08 |
Family
ID=74951835
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011594928.9A Active CN112506813B (zh) | 2020-12-29 | 2020-12-29 | 一种内存管理方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112506813B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115964002A (zh) * | 2023-03-13 | 2023-04-14 | 杭州炬华科技股份有限公司 | 一种电能表终端档案管理方法、装置、设备及介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1567249A (zh) * | 2003-06-16 | 2005-01-19 | 华为技术有限公司 | 计算机系统的内存管理方法 |
CN101140531A (zh) * | 2007-10-10 | 2008-03-12 | 中兴通讯股份有限公司 | 快速申请内存的方法 |
CN103136104A (zh) * | 2011-11-24 | 2013-06-05 | 深圳市快播科技有限公司 | 一种内存管理方法和系统 |
US20190236001A1 (en) * | 2018-01-31 | 2019-08-01 | Hewlett Packard Enterprise Development Lp | Shared fabric attached memory allocator |
-
2020
- 2020-12-29 CN CN202011594928.9A patent/CN112506813B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1567249A (zh) * | 2003-06-16 | 2005-01-19 | 华为技术有限公司 | 计算机系统的内存管理方法 |
CN101140531A (zh) * | 2007-10-10 | 2008-03-12 | 中兴通讯股份有限公司 | 快速申请内存的方法 |
CN103136104A (zh) * | 2011-11-24 | 2013-06-05 | 深圳市快播科技有限公司 | 一种内存管理方法和系统 |
US20190236001A1 (en) * | 2018-01-31 | 2019-08-01 | Hewlett Packard Enterprise Development Lp | Shared fabric attached memory allocator |
Non-Patent Citations (1)
Title |
---|
宋敏超等: "一种新型嵌入式动态内存分配算法", 《计算机应用》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115964002A (zh) * | 2023-03-13 | 2023-04-14 | 杭州炬华科技股份有限公司 | 一种电能表终端档案管理方法、装置、设备及介质 |
Also Published As
Publication number | Publication date |
---|---|
CN112506813B (zh) | 2022-04-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9298760B1 (en) | Method for shard assignment in a large-scale data processing job | |
US6757802B2 (en) | Method for memory heap and buddy system management for service aware networks | |
CN105095287A (zh) | Lsm数据合并排序方法和装置 | |
JP2010033561A (ja) | マルチプロセッサ・システム上でデータ・セットを区分化およびソートするための方法および装置 | |
JPH0546447A (ja) | 空き領域検索方法 | |
US9977598B2 (en) | Electronic device and a method for managing memory space thereof | |
US20180300330A1 (en) | Proactive spilling of probe records in hybrid hash join | |
CN104239134A (zh) | 一种众核系统的任务管理方法和装置 | |
KR20210092689A (ko) | 그래프 데이터베이스의 순회 방법, 장치, 설비 및 저장매체 | |
CN111984729A (zh) | 异构数据库数据同步方法、装置、介质和电子设备 | |
US10831732B2 (en) | Bitmap-based storage space management system and methods thereof | |
CN112506813B (zh) | 一种内存管理方法和系统 | |
Yang et al. | Improving Spark performance with MPTE in heterogeneous environments | |
WO2015176315A1 (zh) | 哈希连接方法、装置和数据库管理系统 | |
CN113805816B (zh) | 一种磁盘空间管理方法、装置、设备及存储介质 | |
KR20170065374A (ko) | 버킷 단위의 정렬을 기반으로 하는 해시 충돌 처리 방법 | |
US8935508B1 (en) | Implementing pseudo content access memory | |
CN109992526A (zh) | 一种读写管理方法以及相关装置 | |
WO2016187975A1 (zh) | 内存碎片整理方法及装置 | |
CN113590332A (zh) | 内存管理方法、装置及内存分配器 | |
CN108804571B (zh) | 一种数据存储方法、装置以及设备 | |
CN111767287A (zh) | 数据导入方法、装置、设备及计算机存储介质 | |
CN106980673A (zh) | 内存数据库表索引更新方法及系统 | |
CN114595056A (zh) | 一种栈的自动增长处理系统及方法 | |
CN114661668A (zh) | 文件管理方法及相关装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |