CN111078410B - 内存分配方法、装置、存储介质及电子设备 - Google Patents
内存分配方法、装置、存储介质及电子设备 Download PDFInfo
- Publication number
- CN111078410B CN111078410B CN201911268317.2A CN201911268317A CN111078410B CN 111078410 B CN111078410 B CN 111078410B CN 201911268317 A CN201911268317 A CN 201911268317A CN 111078410 B CN111078410 B CN 111078410B
- Authority
- CN
- China
- Prior art keywords
- memory
- page frame
- frame number
- linked list
- target page
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本申请实施例公开了一种内存分配方法、装置、存储介质及电子设备,其中,本申请实施例当接收到内存分配请求时,确定内存分配请求对应的内存需求量;获取由空闲内存页的页帧号构成的内存空间链表;按照页帧号在所述内存空间链表中的排列顺序,从所述内存空间链表中确定出与所述内存需求量匹配的第一目标页帧号;基于第一目标页帧号响应内存分配请求。通过这种内存分配方式,可以将已分配内存块集中管理,从整体上减小了内存空间的碎片化程度,提高了内存分配成功率。
Description
技术领域
本申请涉及终端技术领域,具体涉及一种内存分配方法、装置、存储介质及电子设备。
背景技术
计算机***的内存容量通常是有限的,而同一个计算机***上却可以运行许多计算机应用程序,为了保证不同计算机应用程序高效地使用***内存,就需要对***内存进行有效管理,这是计算机领域中的一项关键技术。
然而目前Linux操作***在运行一段时间后,经过频繁的页交换之后,使物理内存中空闲页框的分布变得很分散、零碎,即出现大量的“内存碎片”。这些碎片的总容量可能足够大,但在空间上不连续。若内存碎片越来越多,就会导致内存分配成功率低。
发明内容
本申请实施例提供一种内存分配方法、装置、存储介质及电子设备,能够提高内存分配成功率。
第一方面,本申请实施例提供一种内存分配方法,包括:
当接收到内存分配请求时,确定所述内存分配请求对应的内存需求量;
获取由空闲内存页的页帧号构成的内存空间链表,其中,所述内存空间链表中的页帧号按照由小到大的顺序排列;
按照页帧号在所述内存空间链表中的排列顺序,从所述内存空间链表中确定出与所述内存需求量匹配的第一目标页帧号;
基于所述第一目标页帧号响应所述内存分配请求。
第二方面,本申请实施例还提供一种内存分配装置,包括:
请求接收模块,用于当接收到内存分配请求时,确定所述内存分配请求对应的内存需求量;
链表管理模块,用于获取由内存空间中的空闲内存页的页帧号构成的内存空间链表,其中,所述内存空间链表中的页帧号按照由小到大的顺序排列;
内存页确定模块,用于按照页帧号在所述内存空间链表中的排列顺序,从所述内存空间链表中确定出与所述内存需求量匹配的第一目标页帧号;
内存分配模块,用于基于所述第一目标页帧号响应所述内存分配请求。
第三方面,本申请实施例还提供一种存储介质,其上存储有计算机程序,当所述计算机程序在计算机上运行时,使得所述计算机执行如本申请任一实施例提供的内存分配方法。
第四方面,本申请实施例还提供一种电子设备,包括处理器和存储器,所述存储器有计算机程序,所述处理器通过调用所述计算机程序,用于执行如本申请任一实施例提供的内存分配方法。
本申请实施例提供的技术方案,针对内存空间中的空闲内存页,维护有一个内存空间链表,该内存空间链表由空闲内存页的页帧号构成,并且所述内存空间链表中的页帧号按照由小到大的顺序排列,当接收到内存分配请求,需要进行内存分配时,获取该链表,按照页帧号在所述内存空间链表中的排列顺序,从所述内存空间链表中确定出与所述内存需求量匹配的第一目标页帧号,基于第一目标页帧号响应内存分配请求,通过这种内存分配方式,可以在内存分配时,无论是从链表的哪一端选择页帧号,都可以使得分配的内存页比较集中,从整体上减小了内存空间的碎片化程度,提高了内存分配成功率。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的内存分配方法的第一种流程示意图。
图2为本申请实施例提供的内存分配方法的内存空间示意图。
图3为本申请实施例提供的内存分配方法的内存空间链表的示意图。
图4为本申请实施例提供的内存分配方法的第二种流程示意图。
图5为本发明实施例提供的内存分配方法的释放页面的处理流程示意图。
图6为本申请实施例提供的内存分配装置的结构示意图。
图7为本申请实施例提供的电子设备的第一种结构示意图。
图8为本申请实施例提供的电子设备的第二种结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有付出创造性劳动前提下所获得的所有其他实施例,都属于本申请的保护范围。
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
本申请实施例提供一种内存分配方法,该内存分配方法的执行主体可以是本申请实施例提供的内存分配装置,或者集成了该内存分配装置的电子设备,其中该内存分配装置可以采用硬件或者软件的方式实现。其中,电子设备可以是智能手机、平板电脑、掌上电脑、笔记本电脑、或者台式电脑等设备。
请参阅图1,图1为本申请实施例提供的内存分配方法的第一种流程示意图。本申请实施例提供的内存分配方法的具体流程可以如下:
101、当接收到内存分配请求时,确定所述内存分配请求对应的内存需求量。
电子设备的***和应用程序的进程的运行,都需要***内核为其分配内存空间。并且随着***的运行,内存空间中的内存页经过多次分配、释放操作,会产生很多不连续的、分散的空闲内存页,这样的空闲内存页即为内存碎片。并且随着***的运行时间越长,内存碎片越多。当进程请求的内存量大,即请求的是大块内存(也称为高阶内存)时,即使内存空间中总的空闲内存页满足需求,但是由于大量的内存碎片存在,会导致分配不了连续的内存,造成内存分配失败。此时,就需要先对内存碎片进行整理,以得到连续的可分配内存空间,才能继续进行内存分配。
其中,关于内存的阶数(order)的解释如下:由于内存分配一般都是按照2的整次幂进行分配,例如,分配order=2的内存,实际分配的是4K*22=16KB的内存,其中,一个内存页的大小为4KB。一般将内存需求量的阶数大于预设阶数的请求,称为高阶分配请求,即请求的是高阶内存。例如,预设阶数为2,则将order>2的连续内存空间称为高阶内存,反之,称为低阶内存。高阶内存对应的内存页的数量较多,例如,某进程请求32KB的内存,则需要为其分配连续的8个内存页。该请求可以认为是一个高阶分配请求。其中,在其他实施例中,一个内存页的大小还可以根据需要设置为其他值。
由于碎片整理需要一定的时间,并且内存碎片整理需要涉及到内存页数据的搬迁,耗费时间长,此外,遇到一些内存页不可搬迁(例如内核页面)时,还需要继续回收,如果每一次接收到内存分配请求,都需要先进行内存碎片整理才能进行内存的分配,会导致内存分配效率低。
102、获取由空闲内存页的页帧号构成的内存空间链表,其中,所述内存空间链表中的页帧号按照由小到大的顺序排列。
为了解决上述问题,本申请提出的内存分配方案中,维护针对内存空间中的空闲内存页,维护有一个内存空间链表,该内存空间链表由空闲内存页的页帧号构成,并且所述内存空间链表中的页帧号按照由小到大的顺序排列。例如,内存空间链表中的页帧号可以按照由小到大的顺序从链表的起始端排列至终止端。当接收到内存分配请求时,先确定该内存分配请求对应的内存需求量,然后获取该内存空间链表,根据内存需求量从内存空间选择空闲内存空间进行分配。
例如,请参阅图2和图3,图2为本申请实施例提供的内存分配方法的内存空间示意图。图3为本申请实施例提供的内存分配方法的内存空间链表的示意图。其中,每一个矩形框表示一个内存页,其中的数字表示该内存页的页帧号。灰色的矩形框表示该内存页被占用,即该内存页处于已分配状态,白色的矩形框表示空闲内存页,即该内存页处于未分配状态。假设内存空间共有20个内存页,其中,页帧号为2、3、6、10、11的页面处于已分配状态。页帧号为1、4、5、7、8、9、12、13、14、15、16、17、18、19、20的页面处于未分配状态,为空闲页面,由这些空闲页面的页帧号按照由小至大的顺序排列,构成该内存空间对应的内存空间链表。其中,页帧号较小的一端记为起始端,也可以称为表头,页帧号较大的一端记为终止端,也可以称为表尾。
可以理解的是,为了便于读者理解本申请实施例的方案,在举例时以较少数量的内存页进行举例说明。在实际应用中,电子设备的内存空间中内存页数量远大于20。
此外,需要说明的是,该空间内存链表只用于保存空闲内存页的页帧号,因此,随着***和应用程序的运行,一些内存页由未分配状态变为已分配状态,则将该内存页对应的页帧号从该内存空间链表中删除,反之,如果一些已分配状态的非空闲页被释放后,其状态又变成为未分配状态,则再将该非空闲页的页帧号添加到该内存空间链表中。因此,可以看出本申请提出的内存空间链表会随着运行情况动态地发生变化。
103、按照页帧号在内存空间链表中的排列顺序,从内存空间链表中确定出与内存需求量匹配的第一目标页帧号。
获取到内存空间链表后,按照页帧号在内存空间链表中的排列顺序从内存空间链表中选择与内存需求量匹配的第一目标页帧号,例如,可以从链表的起始端,即页帧号小的一段确定出与所述内存需求量匹配的第一目标页帧号。
或者,一些实施例中,根据内存需求量的大小从内存空间的不同位置处选择空闲内存空间进行分配。内存需求量的大小是否小于预设内存阈值,其中,预设内存阈值是一个用来判断内存分配请求所请求的是高阶内存还是低阶内存的值。例如,在一些实施例中,按照页帧号在所述内存空间链表中的排列顺序,从所述内存空间链表中确定出与所述内存需求量匹配的第一目标页帧号,包括:当所述内存需求量小于预设内存阈值时,从所述内存空间链表的起始端确定出与内存需求量匹配的第一目标页帧号;当所述内存需求量不小于所述预设内存阈值时,从所述内存空间链表的终止端确定出与所述内存需求量匹配的第一目标页帧号。
例如,预设内存阈值为16KB,如果内存需求量小于16KB,则沿起始端至终止端的方向,遍历内存空间链表的页帧号,直至从内存空间链表查找与该内存需求量匹配的空闲内存页,即从页帧号小的一段确定出与所述内存需求量匹配的第一目标页帧号,其中,与所述内存需求量匹配的第一目标页帧号是指,内存大小能够满足该内存需求量的连续多个空闲内存页的页帧号。
假设内存需求量为12KB,则需要3个连续的内存页面,如图3所示,从起始端第一个页帧号1开始,能够满足该需求的页帧号为7、8、9,也就是说,页帧号为7、8、9的三个连续空闲页面构成的连续内存空间可以满足该内存需求量,将页帧号7、8、9作为第一目标页帧号。其中,页帧号为1和4、5的小块内存可以被看作是内存碎片,假设再有内存需求量更小的内存分配请求,例如,某线程请求4KB的内存,则可以将页帧号1作为第一目标页帧号。
反之,如果内存需求量大于16KB,则沿终止端至起始端的方向,遍历内存空间链表的页帧号,直至从内存空间链表查找与该内存需求量匹配的空闲内存页,即从链表上页帧号大的一段确定出与所述内存需求量匹配的第一目标页帧号。
假设内存需求量为20KB,则需要5个连续的内存页面,如图3所示,终止端的页帧号为20至12的9个页面可以构成连续内存空间,则将20至16的连续5个页帧号作为第一目标页帧号。
通过这种分配方式,当接收到内存分配请求,需要进行内存分配时,获取该链表,并根据请求的内存需求量选择从起始端或者从终止端进行内存分配,当内存需求量小于预设内存阈值时,请求的是小块内存,可以从链起始端选择页帧号,也即选择较小的页帧号对应的空闲内存页进行分配,反之当内存需求量不小于预设内存阈值时,请求的是大块内存,可以从链终止端选择页帧号,也即选择较大的页帧号对应的空闲内存页进行分配,通过这种内存分配方式,可以将小块内存集中管理,即使这些分配的小块内存释放后形成了内存碎片,这些内存碎片也会集中分布在页帧号较小的内存段中,并且可以分配给内存需求量小的内存分配请求,而在页帧号较大的内存段中,更容易形成连续的大块内存,因此,从整体上减小了内存空间的碎片化程度,提高了内存分配成功率。
104、基于所述第一目标页帧号响应所述内存分配请求。
获取到与内存需求量匹配的第一目标页帧号之后,基于该第一目标页帧号响应内存分配请求,例如,将第一目标页帧号中的最小页帧号返回给发送内存分配请求的线程。或者,确定所述第一目标页帧号对应的内存页在内存空间中的物理内存地址;基于所述物理内存地址响应所述内存分配请求。对于内存空间来说,内存页有对应的物理内存地址,页帧号连续的内存页也具有连续的物理内存地址。将为线程分配的内存空间的物理内存地址返回给线程,线程在执行任务时,基于该物理内存地址使用分配的内存空间。
具体实施时,本申请不受所描述的各个步骤的执行顺序的限制,在不产生冲突的情况下,某些步骤还可以采用其它顺序进行或者同时进行。
由上可知,本申请实施例提供的内存分配方法,针对内存空间中的空闲内存页,维护有一个内存空间链表,该内存空间链表由空闲内存页的页帧号构成,并且所述内存空间链表中的页帧号按照由小到大的顺序排列,当接收到内存分配请求,需要进行内存分配时,获取该链表,按照页帧号在所述内存空间链表中的排列顺序,从所述内存空间链表中确定出与所述内存需求量匹配的第一目标页帧号,基于第一目标页帧号响应内存分配请求,通过这种内存分配方式,可以在内存分配时,无论是从链表的哪一端选择页帧号,都可以使得分配的内存页比较集中,从整体上减小了内存空间的碎片化程度,提高了内存分配成功率。
在一些实施例中,本方案的内存分配方法还包括:当检测到有已分配页面释放时,确定所述已分配页面对应的第二目标页帧号;确定所述第二目标页帧号在所述内存空间链表中的目标位置;根据所述目标位置将所述目标页帧号添加至所述内存空间链表。
其中,电子设备在运行过程中会实时地检测已分配页面的释放情况,例如线程执行完任务后会释放占用的内存页,进程关闭时会释放占用的内存页等等,当检测有内存页释放时,需要将这些释放的内存页的页帧号重新添加到内存空间链表中,因此,上述过程可以发生在101之前,或者105之后。或者,也可以发生在101-105之间。
当检测到有已分配页面释放时,先确定该页面的页帧号,假设第二目标页帧号为6,则如图3所示,需要先确定页帧号6在内存空间链表中可以***的位置,再按照该将页帧号6***到内存空间链表中。
例如,在一些实施例中,可以按照从起始端至终止端的顺序,遍历内存空间链表中的页帧号,直至访问到页帧号大于所述第二目标页帧号的第三目标页帧号;将所述第三目标页帧号所在的位置作为目标位置。例如,假设第二目标页帧号为6,则如图3所示,从起始端开始遍历,直至遍历到第一个大于6的页帧号7,将7作为第三目标页帧号,将6***到7之前的相邻位置处。
或者,在其他实施例中,还可以根据第二目标页帧号的大小选择不同的遍历方向以确定目标位置。例如,判断所述第二目标页帧号是否大于预设页帧号阈值;当所述第二目标页帧号大于所述预设页帧号阈值时,从所述终止端起遍历所述内存空间链表,直至访问到页帧号小于所述第二目标页帧号的第三目标页帧号;当所述第二目标页帧号不大于所述预设页帧号阈值时,从所述起始端起遍历所述内存空间链表,直至访问到页帧号大于所述第二目标页帧号的第三目标页帧号;将所述第三目标页帧号所在的位置作为目标位置。
例如,预设页帧号阈值为10,假设第二目标页帧号为18,则可以按照从终止端到起始端的方向确定目标位置。假设第二目标页帧号为8,则可以按照从起始端到终止端的方向确定目标位置。
在一些实施例中,确定所述第二目标页帧号在所述内存空间链表中的目标位置还可以包括:获取由空闲页面的页帧号构建的平衡二叉树;确定所述平衡二叉树上页帧号小于所述第二目标页帧号、且与所述第二目标页帧号最接近的第四目标页帧号;将所述第四目标页帧号所在的位置作为目标位置。
该实施例中,可以通过构建平衡二叉树的方式,确定要***第二目标页帧号的目标位置,其中,平衡二叉树可以是红黑树等。具体实施方式请参见下述实施例。
根据前面实施例所描述的方法,以下将举例作进一步详细说明。
请参阅图4,图4为本发明实施例提供的内存分配方法的第二流程示意图。
所述方法包括:
201、当接收到内存分配请求时,确定所述内存分配请求对应的内存需求量。
202、获取由空闲内存页的页帧号构成的内存空间链表。
当接收到内存分配请求,先确定该内存分配请求对应的内存需求量,然后获取该内存空间链表,根据内存需求量的大小从内存空间的不同位置处选择空闲内存空间进行分配。
203、当所述内存需求量小于预设内存阈值时,从所述内存空间链表的起始端确定出与所述内存需求量匹配的第一目标页帧号。
获取到内存空间链表后,判断内存需求量的大小是否小于预设内存阈值,其中,预设内存阈值是一个用来判断内存分配请求所请求的是高阶内存还是低阶内存。
例如,预设内存阈值为16KB,如果内存需求量小于16KB,则从内存空间链表的起始端,即页帧号小的一段确定出与所述内存需求量匹配的第一目标页帧号,其中,与所述内存需求量匹配的第一目标页帧号是指,内存大小能够满足该内存需求量的连续多个空闲内存页的页帧号。
204、当所述内存需求量不小于所述预设内存阈值时,从所述内存空间链表的终止端确定出与所述内存需求量匹配的第一目标页帧号。
反之,如果内存需求量大于或等于16KB,则从内存空间链表的终止端,即页帧号大的一段确定出与所述内存需求量匹配的第一目标页帧号。从内存空间链表的终止端至起始端的方向查找与该内存需求量匹配的空闲内存页。
205、基于所述第一目标页帧号响应所述内存分配请求。
获取到与内存需求量匹配的第一目标页帧号之后,基于该第一目标页帧号响应内存分配请求,例如,确定所述第一目标页帧号对应的内存页在内存空间中的物理内存地址;基于所述物理内存地址响应所述内存分配请求。
206、将所述第一目标页帧号从所述内存空间链表中删除;将所述第一目标页帧号对应的节点从所述平衡二叉树上删除。
在将第一目标页帧号对应的内存页分配给线程之后,这些内存页就会变成已分配状态,不再是空闲内存页,因此,需要将其第一目标页帧号从所述内存空间链表中删除。同时,将其对应的节点从所述平衡二叉树上删除。其中,关于平衡二叉树的说明,请参照后文所述。
207、检测到有已分配页面释放时,确定所述已分配页面对应的第二目标页帧号。
208、获取由空闲页面的页帧号构建的平衡二叉树。
209、确定所述平衡二叉树上页帧号小于所述第二目标页帧号、且与所述第二目标页帧号最接近的第四目标页帧号。
电子设备在运行过程中会实时地检测已分配页面的释放情况,例如线程执行完任务后会释放占用的内存页,进程关闭时会释放占用的内存页等等,当检测有内存页释放时,需要将这些释放的内存页的页帧号重新添加到内存空间链表中当检测到有已分配页面释放时,先确定该页面的页帧号。然后根据该页帧号和预先构建的平衡二叉树确定要***的目标位置。
其中,该实施例中的平衡二叉树为红黑树,使用空闲页面的页帧号构建红黑树,其中,一个页帧号作为一个节点(这里是指非叶子节点),叶子节点均为null。构建规则按照一般红黑树的构建规则,当有节点增加或删除时,动态调整红黑树的结构,以保持红黑树的平衡。根据红黑树来查找目标位置方式,其算法复杂度远小于通过遍历内存空间链表的方式的算法复杂度,提高了内存管理效率。
请参阅图5,图5为本发明实施例提供的内存分配方法的释放页面的处理流程示意图。假设确定出被释放的内存页的页帧号为6,也即第二目标页帧号为6,则根据红黑树能够快速地找到页帧号小于所述第二目标页帧号、且与所述第二目标页帧号最接近的第四目标页帧号5,即将与释放页的页帧号最接近的前页的页帧号作为第四目标页帧号。
210、将所述第四目标页帧号所在的位置作为目标位置。
211、根据所述目标位置将所述目标页帧号添加至所述内存空间链表。
将确定出的第四目标页帧号作为目标位置,将第二目标页帧号***到第四目标页帧号之后的相邻位置处,如图5所示,将页帧号6***到5之后的相邻位置处,即将页帧号6***到5与7之间。
或者,在其他实施例中,确定所述平衡二叉树上页帧号小于所述第二目标页帧号、且与所述第二目标页帧号最接近的第四目标页帧号。可以理解的是,这种方案,需要将目标页帧号添加至第四目标页帧号之前的相邻位置处。
由上可知,本发明实施例提出的内存分配方法,可以将小块内存集中管理,即使这些分配的小块内存释放后形成了内存碎片,这些内存碎片也会集中分布在页帧号较小的内存段中,并且可以分配给内存需求量小的内存分配请求,而在页帧号较大的内存段中,更容易形成连续的大块内存,因此,从整体上减小了内存空间的碎片化程度,提高了内存分配成功率。此外,在内存页释放时,可以根据平衡二叉树确定释放页在内存空间中位置,进而提高了内存管理的效率。
在一实施例中还提供一种内存分配装置。请参阅图6,图6为本申请实施例提供的内存分配装置300的结构示意图。其中该内存分配装置300应用于电子设备,该内存分配装置300包括请求接收模块301、链表管理模块302、内存页确定模块303以及内存分配模块304,如下:
请求接收模块301,用于当接收到内存分配请求时,确定所述内存分配请求对应的内存需求量;
链表管理模块302,用于获取由内存空间中的空闲内存页的页帧号构成的内存空间链表,其中,所述内存空间链表中的页帧号按照由小到大的顺序排列;
内存页确定模块303,用于按照页帧号在所述内存空间链表中的排列顺序,从所述内存空间链表中确定出与所述内存需求量匹配的第一目标页帧号;
内存分配模块304,用于基于所述第一目标页帧号响应所述内存分配请求。
在一些实施例中,所述内存空间链表中的页帧号按照由小到大从起始端排列至终止端;内存页确定模块303还用于:
当所述内存需求量小于预设内存阈值时,从所述内存空间链表的起始端确定出与内存需求量匹配的第一目标页帧号;
当所述内存需求量不小于所述预设内存阈值时,从所述内存空间链表的终止端确定出与所述内存需求量匹配的第一目标页帧号。
在一些实施例中,链表管理模块302还用于:
当检测到有已分配页面释放时,确定所述已分配页面对应的第二目标页帧号;
确定所述第二目标页帧号在所述内存空间链表中的目标位置;
根据所述目标位置将所述目标页帧号添加至所述内存空间链表。
在一些实施例中,链表管理模块302还用于:
判断所述第二目标页帧号是否大于预设页帧号阈值;
当所述第二目标页帧号大于所述预设页帧号阈值时,从所述终止端起遍历所述内存空间链表,直至访问到页帧号小于所述第二目标页帧号的第三目标页帧号;
当所述第二目标页帧号不大于所述预设页帧号阈值时,从所述起始端起遍历所述内存空间链表,直至访问到页帧号大于所述第二目标页帧号的第三目标页帧号;
将所述第三目标页帧号所在的位置作为目标位置。
在一些实施例中,链表管理模块302还用于:获取由空闲页面的页帧号构建的平衡二叉树;
确定所述平衡二叉树上页帧号小于所述第二目标页帧号、且与所述第二目标页帧号最接近的第四目标页帧号;
将所述第四目标页帧号所在的位置作为目标位置。
在一些实施例中,链表管理模块302还用于:将所述第二目标页帧号作为一个新的节点添加至所述平衡二叉树。
在一些实施例中,链表管理模块302还用于:
将所述第一目标页帧号从所述内存空间链表中删除;
将所述第一目标页帧号对应的节点从所述平衡二叉树上删除。
在一些实施例中,内存分配模块304还用于:
确定所述第一目标页帧号对应的内存页在内存空间中的物理内存地址;
基于所述物理内存地址响应所述内存分配请求。
具体实施时,以上各个模块可以作为独立的实体来实现,也可以进行任意组合,作为同一或若干个实体来实现,以上各个模块的具体实施可参见前面的方法实施例,在此不再赘述。
应当说明的是,本申请实施例提供的内存分配装置与上文实施例中的内存分配方法属于同一构思,在内存分配装置上可以运行内存分配方法实施例中提供的任一方法,其具体实现过程详见内存分配方法实施例,此处不再赘述。
由上可知,本申请实施例提出的内存分配装置,针对内存空间中的空闲内存页,维护有一个内存空间链表,该内存空间链表由空闲内存页的页帧号构成,并且所述内存空间链表中的页帧号按照由小到大的顺序排列,当接收到内存分配请求,需要进行内存分配时,获取该链表,按照页帧号在所述内存空间链表中的排列顺序,从所述内存空间链表中确定出与所述内存需求量匹配的第一目标页帧号,基于第一目标页帧号响应内存分配请求,通过这种内存分配方式,可以在内存分配时,无论是从链表的哪一端选择页帧号,都可以使得分配的内存页比较集中,从整体上减小了内存空间的碎片化程度,提高了内存分配成功率。
本申请实施例还提供一种电子设备。所述电子设备可以是智能手机、平板电脑等设备。请参阅图7,图7为本申请实施例提供的电子设备的第一种结构示意图。电子设备400包括处理器401和存储器402。其中,处理器401与存储器402电性连接。
处理器401是电子设备400的控制中心,利用各种接口和线路连接整个电子设备的各个部分,通过运行或调用存储在存储器402内的计算机程序,以及调用存储在存储器402内的数据,执行电子设备的各种功能和处理数据,从而对电子设备进行整体监控。
存储器402可用于存储计算机程序和数据。存储器402存储的计算机程序中包含有可在处理器中执行的指令。计算机程序可以组成各种功能模块。处理器401通过调用存储在存储器402的计算机程序,从而执行各种功能应用以及数据处理。
在本实施例中,电子设备400中的处理器401会按照如下的步骤,将一个或一个以上的计算机程序的进程对应的指令加载到存储器402中,并由处理器401来运行存储在存储器402中的计算机程序,从而实现各种功能:
当接收到内存分配请求时,确定所述内存分配请求对应的内存需求量;
获取由空闲内存页的页帧号构成的内存空间链表,其中,所述内存空间链表中的页帧号按照由小到大的顺序排列;
按照页帧号在所述内存空间链表中的排列顺序,从所述内存空间链表中确定出与所述内存需求量匹配的第一目标页帧号;
基于所述第一目标页帧号响应所述内存分配请求。
在一些实施例中,请参阅图8,图8为本申请实施例提供的电子设备的第二种结构示意图。电子设备400还包括:射频电路403、显示屏404、控制电路405、输入单元406、音频电路407、传感器408以及电源409。其中,处理器401分别与射频电路403、显示屏404、控制电路405、输入单元406、音频电路407、传感器408以及电源409电性连接。
射频电路403用于收发射频信号,以通过无线通信与网络设备或其他电子设备进行通信。
显示屏404可用于显示由用户输入的信息或提供给用户的信息以及电子设备的各种图形用户接口,这些图形用户接口可以由图像、文本、图标、视频和其任意组合来构成。
控制电路405与显示屏404电性连接,用于控制显示屏404显示信息。
输入单元406可用于接收输入的数字、字符信息或用户特征信息(例如指纹),以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。其中,输入单元406可以包括指纹识别模组。
音频电路407可通过扬声器、传声器提供用户与电子设备之间的音频接口。其中,音频电路407包括麦克风。所述麦克风与所述处理器401电性连接。所述麦克风用于接收用户输入的语音信息。
传感器408用于采集外部环境信息。传感器408可以包括环境亮度传感器、加速度传感器、陀螺仪等传感器中的一种或多种。
电源409用于给电子设备400的各个部件供电。在一些实施例中,电源409可以通过电源管理***与处理器401逻辑相连,从而通过电源管理***实现管理充电、放电、以及功耗管理等功能。
尽管图8中未示出,电子设备400还可以包括摄像头、蓝牙模块等,在此不再赘述。
在本实施例中,电子设备400中的处理器401会按照如下的步骤,将一个或一个以上的计算机程序的进程对应的指令加载到存储器402中,并由处理器401来运行存储在存储器402中的计算机程序,从而实现各种功能:
当接收到内存分配请求时,确定所述内存分配请求对应的内存需求量;
获取由空闲内存页的页帧号构成的内存空间链表,其中,所述内存空间链表中的页帧号按照由小到大的顺序排列;
按照页帧号在所述内存空间链表中的排列顺序,从所述内存空间链表中确定出与所述内存需求量匹配的第一目标页帧号
基于所述第一目标页帧号响应所述内存分配请求。
在一些实施例中,所述内存空间链表中的页帧号按照由小到大从起始端排列至终止端;在按照页帧号在所述内存空间链表中的排列顺序,从所述内存空间链表中确定出与所述内存需求量匹配的第一目标页帧号时,处理器401还执行:
当所述内存需求量小于预设内存阈值时,从所述内存空间链表的起始端确定出与内存需求量匹配的第一目标页帧号;
当所述内存需求量不小于所述预设内存阈值时,从所述内存空间链表的终止端确定出与所述内存需求量匹配的第一目标页帧号。
在一些实施例中,处理器401还执行:
当检测到有已分配页面释放时,确定所述已分配页面对应的第二目标页帧号;
确定所述第二目标页帧号在所述内存空间链表中的目标位置;
根据所述目标位置将所述目标页帧号添加至所述内存空间链表。
在一些实施例中,处理器401还执行:
判断所述第二目标页帧号是否大于预设页帧号阈值;
当所述第二目标页帧号大于所述预设页帧号阈值时,从所述终止端起遍历所述内存空间链表,直至访问到页帧号小于所述第二目标页帧号的第三目标页帧号;
当所述第二目标页帧号不大于所述预设页帧号阈值时,从所述起始端起遍历所述内存空间链表,直至访问到页帧号大于所述第二目标页帧号的第三目标页帧号;
将所述第三目标页帧号所在的位置作为目标位置。
在一些实施例中,在确定所述第二目标页帧号在所述内存空间链表中的目标位置时,处理器401执行:
获取由空闲页面的页帧号构建的平衡二叉树;
确定所述平衡二叉树上页帧号小于所述第二目标页帧号、且与所述第二目标页帧号最接近的第四目标页帧号;
将所述第四目标页帧号所在的位置作为目标位置。
由上可知,本申请实施例提供了一种电子设备,所述电子设备针对内存空间中的空闲内存页,维护有一个内存空间链表,该内存空间链表由空闲内存页的页帧号构成,并且所述内存空间链表中的页帧号按照由小到大的顺序排列,当接收到内存分配请求,需要进行内存分配时,获取该链表,按照页帧号在所述内存空间链表中的排列顺序,从所述内存空间链表中确定出与所述内存需求量匹配的第一目标页帧号,基于第一目标页帧号响应内存分配请求,通过这种内存分配方式,可以在内存分配时,无论是从链表的哪一端选择页帧号,都可以使得分配的内存页比较集中,从整体上减小了内存空间的碎片化程度,提高了内存分配成功率。
本申请实施例还提供一种存储介质,所述存储介质中存储有计算机程序,当所述计算机程序在计算机上运行时,所述计算机执行上述任一实施例所述的内存分配方法。
需要说明的是,本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过计算机程序来指令相关的硬件来完成,所述计算机程序可以存储于计算机可读存储介质中,所述存储介质可以包括但不限于:只读存储器(ROM,Read OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁盘或光盘等。
此外,本申请中的术语“第一”、“第二”和“第三”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或模块的过程、方法、***、产品或设备没有限定于已列出的步骤或模块,而是某些实施例还包括没有列出的步骤或模块,或某些实施例还包括对于这些过程、方法、产品或设备固有的其它步骤或模块。
以上对本申请实施例所提供的内存分配方法、装置、存储介质及电子设备进行了详细介绍。本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (10)
1.一种内存分配方法,其特征在于,包括:
当接收到内存分配请求时,确定所述内存分配请求对应的内存需求量;
获取由空闲内存页的页帧号构成的内存空间链表,其中,所述内存空间链表中的页帧号按照由小到大的顺序从起始端排列至终止端;
按照页帧号在所述内存空间链表中的排列顺序,从所述内存空间链表中确定出与所述内存需求量匹配的第一目标页帧号,包括:当所述内存需求量小于预设内存阈值时,从所述内存空间链表的起始端确定出与内存需求量匹配的第一目标页帧号;以及,当所述内存需求量不小于所述预设内存阈值时,从所述内存空间链表的终止端确定出与所述内存需求量匹配的第一目标页帧号;
基于所述第一目标页帧号响应所述内存分配请求。
2.如权利要求1所述的内存分配方法,其特征在于,还包括:
当检测到有已分配页面释放时,确定所述已分配页面对应的第二目标页帧号;
确定所述第二目标页帧号在所述内存空间链表中的目标位置;
根据所述目标位置将所述目标页帧号添加至所述内存空间链表。
3.如权利要求2所述的内存分配方法,其特征在于,确定所述第二目标页帧号在所述内存空间链表中的目标位置,包括:
判断所述第二目标页帧号是否大于预设页帧号阈值;
当所述第二目标页帧号大于所述预设页帧号阈值时,从所述终止端起遍历所述内存空间链表,直至访问到页帧号小于所述第二目标页帧号的第三目标页帧号;
当所述第二目标页帧号不大于所述预设页帧号阈值时,从所述起始端起遍历所述内存空间链表,直至访问到页帧号大于所述第二目标页帧号的第三目标页帧号;
将所述第三目标页帧号所在的位置作为目标位置。
4.如权利要求2所述的内存分配方法,其特征在于,所述确定所述第二目标页帧号在所述内存空间链表中的目标位置,包括:
获取由空闲页面的页帧号构建的平衡二叉树;
确定所述平衡二叉树上页帧号小于所述第二目标页帧号、且与所述第二目标页帧号最接近的第四目标页帧号;
将所述第四目标页帧号所在的位置作为目标位置。
5.如权利要求4所述的内存分配方法,其特征在于,所述将所述第四目标页帧号所在的位置作为目标位置之后,还包括:
将所述第二目标页帧号作为一个新的节点添加至所述平衡二叉树。
6.如权利要求4所述的内存分配方法,其特征在于,所述平衡二叉树为红黑树、伸展树或AVL树;所述基于所述第一目标页帧号响应所述内存分配请求之后,还包括:
将所述第一目标页帧号从所述内存空间链表中删除;
将所述第一目标页帧号对应的节点从所述平衡二叉树上删除。
7.如权利要求1至6任一项所述的内存分配方法,其特征在于,所述基于所述第一目标页帧号响应所述内存分配请求,包括:
确定所述第一目标页帧号对应的内存页在内存空间中的物理内存地址;
基于所述物理内存地址响应所述内存分配请求。
8.一种内存分配装置,其特征在于,包括:
请求接收模块,用于当接收到内存分配请求时,确定所述内存分配请求对应的内存需求量;
链表管理模块,用于获取由内存空间中的空闲内存页的页帧号构成的内存空间链表,其中,所述内存空间链表中的页帧号按照由小到大的顺序从起始端排列至终止端;
内存页确定模块,用于按照页帧号在所述内存空间链表中的排列顺序,从所述内存空间链表中确定出与所述内存需求量匹配的第一目标页帧号;
所述内存页确定模块还用于:当所述内存需求量小于预设内存阈值时,从所述内存空间链表的起始端确定出与内存需求量匹配的第一目标页帧号;以及,当所述内存需求量不小于所述预设内存阈值时,从所述内存空间链表的终止端确定出与所述内存需求量匹配的第一目标页帧号;
内存分配模块,用于基于所述第一目标页帧号响应所述内存分配请求。
9.一种存储介质,其上存储有计算机程序,其特征在于,当所述计算机程序在计算机上运行时,使得所述计算机执行如权利要求1至7任一项所述的内存分配方法。
10.一种电子设备,包括处理器和存储器,所述存储器存储有计算机程序,其特征在于,所述处理器通过调用所述计算机程序,用于执行如权利要求1至7任一项所述的内存分配方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911268317.2A CN111078410B (zh) | 2019-12-11 | 2019-12-11 | 内存分配方法、装置、存储介质及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911268317.2A CN111078410B (zh) | 2019-12-11 | 2019-12-11 | 内存分配方法、装置、存储介质及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111078410A CN111078410A (zh) | 2020-04-28 |
CN111078410B true CN111078410B (zh) | 2022-11-04 |
Family
ID=70313860
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911268317.2A Active CN111078410B (zh) | 2019-12-11 | 2019-12-11 | 内存分配方法、装置、存储介质及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111078410B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113590509B (zh) * | 2020-04-30 | 2024-03-26 | 华为技术有限公司 | 一种页交换的方法、存储***和电子设备 |
CN112685333B (zh) * | 2020-12-28 | 2024-06-07 | 上海创功通讯技术有限公司 | 一种堆内存管理方法及装置 |
CN116821007A (zh) * | 2022-08-17 | 2023-09-29 | 中移(苏州)软件技术有限公司 | 一种进程处理方法和设备 |
CN115658561B (zh) * | 2022-11-16 | 2023-03-14 | 石家庄科林电气股份有限公司 | 配电终端内存管理方法、装置、电子设备及存储介质 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10102116B2 (en) * | 2015-09-11 | 2018-10-16 | Red Hat Israel, Ltd. | Multi-level page data structure |
CN105446841B (zh) * | 2015-11-24 | 2019-02-12 | 无锡江南计算技术研究所 | 缓存一致性测试方法 |
US20170220592A1 (en) * | 2016-02-01 | 2017-08-03 | Microsoft Technology Licensing, Llc | Modular data operations system |
CN105975341A (zh) * | 2016-04-12 | 2016-09-28 | 苏州万特锐仪器有限公司 | 面向多核处理器的内存管理*** |
CN107562645B (zh) * | 2017-08-24 | 2021-03-23 | 华为技术有限公司 | 一种内存页管理方法及计算设备 |
WO2019155264A1 (en) * | 2018-02-11 | 2019-08-15 | Pratik Sharma | Timer based cache for synchronization |
CN108920276A (zh) * | 2018-06-27 | 2018-11-30 | 郑州云海信息技术有限公司 | Linux***内存分配方法、***及设备和存储介质 |
CN110134492B (zh) * | 2019-04-18 | 2021-04-13 | 华中科技大学 | 一种异构内存虚拟机不停机的内存页面迁移*** |
-
2019
- 2019-12-11 CN CN201911268317.2A patent/CN111078410B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN111078410A (zh) | 2020-04-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111078410B (zh) | 内存分配方法、装置、存储介质及电子设备 | |
WO2017107414A1 (zh) | 文件操作方法和装置 | |
CN114096953A (zh) | 内存管理方法、装置、电子设备和计算机可读介质 | |
WO2015121722A1 (en) | Memory resource sharing among multiple compute nodes | |
US11449242B2 (en) | Shared storage space access method, device and system and storage medium | |
EP4328705A1 (en) | Storage space arrangement method and electronic device | |
CN111274039A (zh) | 内存回收方法、装置、存储介质及电子设备 | |
US9880861B2 (en) | Method and apparatus for page view switching | |
CN111475299B (zh) | 内存分配方法、装置、存储介质及电子设备 | |
CN111666184B (zh) | 固态驱动器ssd硬盘测试方法、装置及电子设备 | |
CN113204407A (zh) | 一种内存超配管理方法及装置 | |
JP6674460B2 (ja) | 不均一メモリアーキテクチャにおける改善されたレイテンシのためのシステムおよび方法 | |
CN111352863A (zh) | 内存管理方法、装置、设备及存储介质 | |
CN115421787A (zh) | 指令执行方法、装置、设备、***、程序产品及介质 | |
US20180137045A1 (en) | Automatic memory management using a memory management unit | |
JP2016533588A (ja) | 記憶処理方法、装置及び端末 | |
CN111078587B (zh) | 内存分配方法、装置、存储介质及电子设备 | |
CN110162395B (zh) | 一种内存分配的方法及装置 | |
CN108205559B (zh) | 一种数据管理方法及其设备 | |
CN115934002B (zh) | 固态硬盘的访问方法、固态硬盘、存储***及云服务器 | |
CN111008079A (zh) | 进程管理方法、装置、存储介质及电子设备 | |
JP6676052B2 (ja) | 不均一メモリアーキテクチャにおける改善されたレイテンシを可能にするためのシステムおよび方法 | |
KR20190046470A (ko) | Arp를 수행하는 슬레이브 장치 및 이의 동작 방법 | |
CN111831451A (zh) | 云主机内存分配方法及云主机、设备及存储介质 | |
CN111078407B (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 |