内存分配方法、装置、电子设备及可读存储介质与流程

文档序号:11276231阅读:176来源:国知局
内存分配方法、装置、电子设备及可读存储介质与流程

本发明涉及计算机存储技术领域,具体而言,涉及一种内存分配方法、装置、电子设备及可读存储介质。



背景技术:

目前,在接收到内存分配请求时,电子设备直接从整个内存的可用内存块中去选用适合的区域,不区分所需内存容量的大小。由此,小容量的内存块不断分布在整个内存中。在系统运行一段时间后,系统内持续进行内存块的分配和释放,系统空闲物理内存被使用的内存块分割开,大块的连续物理内存块为0,空闲的内存块只能满足小容量的分配。也就是说,系统可能还有很多空闲的内存块,但是却无法满足大容量的内存分配需求,此时就是发生了内存碎片化。

在发生内存碎片化后,需要花费一定的时间来执行内存重整,以得到整块连续的存储空间。上述做法虽然得到了大容量的内存块,但在一定程度上会影响到用户的正常操作或造成消费额外电力等。因此,如何降低内存碎片化的发生几率是本领域是技术人员急需解决的问题。



技术实现要素:

为了克服现有技术中的上述不足,本发明所要解决的技术问题是提供一种内存分配方法、装置、电子设备及可读存储介质,其能够通过在不同的内存区分配内存块,将不同大小的内存块分开管理,使得内存不会因为不同大小的内存块的混合使用而造成碎片化,由此,降低碎片化的发生几率。

本发明较佳实施例提供一种内存分配方法,应用于电子设备,所述电子设备的内存包括第一内存区及第二内存区,所述方法包括:

接收内存分配请求,所述内存分配请求包括所需分配的内存容量;

将所述所需分配的内存容量与预设内存块的容量范围进行比较,得到比较结果;

根据所述比较结果从第一内存区或第二内存区分配相应容量的内存块。

本发明较佳实施例还提供一种内存分配装置,应用于电子设备,所述电子设备的内存包括第一内存区及第二内存区,所述装置包括:

接收模块,用于接收内存分配请求,所述内存分配请求包括所需分配的内存容量;

比较模块,用于将所述所需分配的内存容量与预设内存块的容量范围进行比较,得到比较结果;

分配模块,用于根据所述比较结果从第一内存区或第二内存区分配相应容量的内存块。

本发明较佳实施例还提供一种电子设备,所述电子设备的内存包括第一内存区及第二内存区,所述电子设备包括:

存储器;

处理器;及

内存分配装置,所述内存分配装置安装于所述存储器中并包括一个或多个由所述处理器执行的软件功能模块,所述装置包括:

接收模块,用于接收内存分配请求,所述内存分配请求包括所需分配的内存容量;

比较模块,用于将所述所需分配的内存容量与预设内存块的容量范围进行比较,得到比较结果;

分配模块,用于根据所述比较结果从第一内存区或第二内存区分配相应容量的内存块。

本发明较佳实施例还提供一种可读存储介质,所述可读存储介质包括计算机程序,所述计算机程序运行时控制所述可读存储介质所在电子设备执行上述任意一项所述的内存分配方法。

相对于现有技术而言,本发明具有以下有益效果:

本发明提供一种内存分配方法、装置、电子设备及可读存储介质。所述方法应用于所述电子设备。所述电子设备的内存包括第一内存区及第二内存区。在接收到内存分配请求后,将内存分配请求中的所需分配的内存容量与预设内存块的容量范围进行比较,得到一比较结果。进而根据比较结果确定从第一内存区或第二内存区分配与所需分配的内存容量匹配的内存块。由此,不仅对内存分配需求进行了响应,同时将不同大小的内存块分开管理,降低了由于不同大小的内存块混合使用而发生碎片化的几率。

为使发明的上述目的、特征和优点能更明显易懂,下文特举本发明较佳实施例,并配合所附附图,作详细说明如下。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1是本发明较佳实施例提供的电子设备的方框示意图。

图2是本发明较佳实施例提供的内存分配方法的流程示意图之一。

图3是本发明较佳实施例提供的内存分配方法的流程示意图之二。

图4是本发明较佳实施例提供的内存分配方法的流程示意图之三。

图5是图4中步骤s150包括的子步骤的流程示意图。

图6是本发明较佳实施例提供的内存分配装置的方框示意图之一。

图7是本发明较佳实施例提供的内存分配装置的方框示意图之二。

图标:100-电子设备;110-存储器;120-存储控制器;130-处理器;200-内存分配装置;210-配置模块;220-接收模块;230-比较模块;240-分配模块;250-容量调整模块;251-检测子模块;252-调整子模块。

具体实施方式

下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本发明的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。

下面结合附图,对本发明的一些实施方式作详细说明。在不冲突的情况下,下述的实施例及实施例中的特征可以相互组合。

请参照图1,图1是本发明较佳实施例提供的电子设备100的方框示意图。本发明实施例中所述电子设备100可以是,但不限于,智能手机、平板电脑等。所述电子设备100包括:存储器110、存储控制器120、处理器130以及内存分配装置200。

所述存储器110、存储控制器120及处理器130各元件之间直接或间接地电性连接,以实现数据的传输或交互。例如,这些元件相互之间可通过一条或多条通讯总线或信号线实现电性连接。存储器110中存储有内存分配装置200,所述内存分配装置200包括至少一个可以软件或固件(firmware)的形式存储于所述存储器110中的软件功能模块。所述处理器130通过运行存储在存储器110内的软件程序以及模块,如本发明实施例中的内存分配装置200,从而执行各种功能应用以及数据处理,即实现本发明实施例中的内存分配方法。

其中,所述存储器110可以是,但不限于,随机存取存储器(randomaccessmemory,ram),只读存储器(readonlymemory,rom),可编程只读存储器(programmableread-onlymemory,prom),可擦除只读存储器(erasableprogrammableread-onlymemory,eprom),电可擦除只读存储器(electricerasableprogrammableread-onlymemory,eeprom)等。其中,存储器110用于存储程序,所述处理器130在接收到执行指令后,执行所述程序。所述处理器130以及其他可能的组件对存储器110的访问可在所述存储控制器120的控制下进行。

所述处理器130可能是一种集成电路芯片,具有信号的处理能力。上述的处理器130可以是通用处理器,包括中央处理器(centralprocessingunit,cpu)、网络处理器(networkprocessor,np)等。还可以是数字信号处理器(dsp)、专用集成电路(asic)、现场可编程门阵列(fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。

可以理解,图1所示的结构仅为示意,电子设备100还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。图1中所示的各组件可以采用硬件、软件或其组合实现。

请参照图2,图2是本发明较佳实施例提供的内存分配方法的流程图之一。所述方法应用于所述电子设备100,所述电子设备100的内存包括第一内存区及第二内存区。下面对内存分配方法的具体流程进行详细阐述。

步骤s120,接收内存分配请求。

在本实施例中,所述电子设备100上运行有很多程序,在程序运行时(比如,通过浏览器浏览网页时),经常会向系统发送内存分配请求,获得相应容量的内存以满足需要。其中,所述内存分配请求包括所需分配的内存容量。

步骤s130,将所述所需分配的内存容量与预设内存块的容量范围进行比较,得到比较结果。

在本实施例中,所述电子设备100的系统在接收到内存分配需求后,通过判定所需分配的内存容量是否在预设内存块的容量范围内,从而分配相应容量的内存块,同时可以区分不同大小的内存块及将不同大小的内存块分开管理。其中,预设内存块的容量范围可以根据实际情况(比如,系统不同)进行设置。

在本实施例的实施方式中,最小的预设内存块的容量可以是4kb(4kb*2^0),接着为8kb(4kb*2^1)、16kb(4kb*2^2)、…、1mb(4kb*2^8),2mb(4kb*2^9),4mb(4kb*2^10)。将对应2的次方的数字称为order,那么,最小的4kb即为order0,最大的4mb即为order10。在本实施例的一种实施方式中,将所述预设内存块的容量范围设置为order0~order10(4kb~4mb)。由于系统的不同,所述预设内存块的容量范围也可以设置成其他范围,比如,order3~order10(32kb~4mb)。

步骤s140,根据所述比较结果从第一内存区或第二内存区分配相应容量的内存块。

在本实施例中,通过根据所述比较结果从第一内存区或第二内存区分配相应容量的内存块,实现了对不同大小的内存块分开管理的目的,由此可降低由于不同大小的内存块混合使用而发生内存碎片化的几率。其中,内存碎片化(memoryfragmentation)是指在用户需要一块n大小且连续的内存块时,虽然可使用内存总量大于n,但是每一个内存块的容量大小都小于用户需求的n,导致用户需求无法被满足。

在本实施例中,若所述所需分配的内存容量在所述预设内存块的容量范围内,且所述第一内存区的可用内存容量大于所述所需分配的内存容量,从第一内存区分配相应容量的预设内存块。所需分配的内存容量在预设内存块的容量范围内,表征对应所述分配请求的内存块可能为小容量的内存块。在第一内存区中的可用内存能够满足所述内存分配需求时,从第一内存区分配该小容量的预设内存块,实现了对不同大小的内存块分开管理的目的。

在本实施例中,若所述所需分配的内存容量在所述预设内存块的容量范围内,且所述第一内存区的可用内存容量小于所述所需分配的内存容量(比如,第一内存区的可用内存容量为0),从第二内存区分配相应容量的预设内存块。虽然所需分配的内存容量在预设内存块的容量范围内,表征对应所述分配请求的内存块可能为小容量的内存块,但是由于第一内存区中的可用内存不能够满足所述内存分配需求时,从第二内存区分配该小容量的预设内存块以满足所述内存分配需求。

在本实施例中,若所述所需分配的内存容量不在所述预设内存块的容量范围内,从第一内存区和/或第二内存区分配相应容量的内存块。所需分配的内存容量不在预设内存块的容量范围内,表征对应所述分配请求的内存块可能为大容量的内存块。从第一内存区或第二内存区分配该大容量的内存块,实现了对不同大小的内存块分开管理的目的。

在上述情形下,若所述第二内存区的可用内存容量大于所述所需分配的内存容量,从所述第二内存区分配相应容量的内存块。在所需分配的内存容量不在预设内存块的容量范围内,且经检测发现第二内存区中的可用内存容量大于所需分配的内存容量时,从第二内存区分配相应容量的内存块,可以使第二内存区管理大容量的内存块。其中,上述第二内存区中的可用内存容量是指第二内存区中连续、可被分配的内存空间。

若所述第二内存区的可用内存容量小于所述所需分配的内存容量,则进行内存重整以从所述第一内存区和/或所述第二内存区获得能够满足所述所需分配的内存容量的内存块。其中,内存重整(memorycompaction)是让可使用的内存相邻,从而合成为一整块连续的内存空间。

在操作系统系统中,虚拟地址跟实际内存是需要映射转换的,一般会有两种映射。一种是可移动的映射,虚拟地址跟实际内存地址能够动态调整映射(比如:一般情况下,用户使用的内存使用的是相同的虚拟地址,但是可以动态映射到不同的实际内存地址)。另一种是不可移动的映射,虚拟地址跟实际内存地址之间的映射不能改动(比如:驱动程序或是操作系统本身使用到的虚拟地址跟物理内存地址)。而内存重整就是将可移动的映射区域整体做一次动态调整,以提供足够大的连续物理内存空间以满足需求。

请参照图3,图3是本发明较佳实施例提供的内存分配方法的流程示意图之二。所述方法还可以包括步骤s110。

步骤s110,对所述电子设备100的内存进行配置,将所述电子设备100的内存配置为第一内存区和第二内存区。

在本实施例中,在所述电子设备100初始化之后,从所述电子设备100的内存中先预留一部分内存作为第一内存区,内存的其余内存空间则作为第二内存区。其中,第一内存区的大小可以根据实际情况进行设置(比如,第一内存区设置为100mb或0等)。

请参照图4,图4是本发明较佳实施例提供的内存分配方法的流程示意图之三。所述方法还可以包括步骤s150。

步骤s150,对所述第一内存区的总容量进行调整。

在本实施例中,通过内存配置得到第一内存区后,可以根据实际情况(比如,第一内存区中内存的使用情况)将第一内存区的总容量进行调整,从而使得所述第一内存区的内存不会被用尽,还可以在第一内存区的可用容量很多时,缩小第一内存区的总容量,以避免浪费。

请参照图5,图5是图4中步骤s150包括的子步骤的流程示意图。所述步骤s150可以包括子步骤s151及子步骤s152。

子步骤s151,对所述第一内存区中的可用容量进行检测。

在本实施例的实施方式中,通过对所述第一内存区进行检测,可获得所述第一内存区的使用情况,比如,已用容量、可用容量等。

子步骤s152,根据所述第一内存区中的可用容量与所述第一内存区的总容量的占比,在预设可调范围内调整所述第一内存区的总容量。

在本实施例的实施方式中,将第一内存区中的可用容量与第一内存区的总容量进行比较,得到第一内存区中的可用容量在第一内存区的总容量的占比。根据得到的所述占比在预设可调范围内对第一内存区的总容量进行调整。其中,预设可调范围可以根据实际情况进行设定(比如,预设可调范围是0至电子设备100的内存的总容量、0~1gb等。)

当所述占比小于第一预设值时,增大所述第一内存区的总容量。当所述占比大于第二预设值时,减小所述第一内存区的总容量。其中,所述第二预设值大于所述第一预设值。调整后的所述第一内存区的总容量依然在所述预设可调范围内。

其中,增大或减小的方式可以是电子设备100的系统自动根据占比依次增大或减小一定的内存空间(比如,10mb);也可以是接收输入的操作,根据操作对第一内存区的总容量增大或减小一定的内存空间。

接下来以举例子的形式介绍如何调整第一内存区的总容量。

预先设置第一内存区的总容量为100mb。在第一内存区中已用容量为95mb,可用容量为5mb时,所述第一内存区的总容量自动增大10mb,所述第一内存区的总容量增大为110mb。在第一内存区中已用容量为30mb,可用容量为70mb时,所述第一内存区的总容量自动减小10mb,所述第一内存区的总容量减小为90mb。由此,避免第一内存区的内存空间被用尽,或第一内存区的空闲内存空间过多的情况。

请参照图6,图6是本发明较佳实施例提供的内存分配装置200的方框示意图之一。所述内存分配装置200应用于电子设备100。所述电子设备100的内存包括第一内存区及第二内存区。所述内存分配装置200包括接收模块220、比较模块230及分配模块240。

接收模块220,用于接收内存分配请求,所述内存分配请求包括所需分配的内存容量。

在本实施例中,所述接收模块220用于执行图2中的步骤s120,关于所述接收模块220的具体描述可以参照图2中步骤s120的描述。

比较模块230,用于将所述所需分配的内存容量与预设内存块的容量范围进行比较,得到比较结果。

在本实施例中,所述比较模块230用于执行图2中的步骤s130,关于所述比较模块230的具体描述可以参照图2中步骤s130的描述。

分配模块240,用于根据所述比较结果从第一内存区或第二内存区分配相应容量的内存块。

所述分配模块240根据所述比较结果从第一内存区或第二内存区分配相应容量的内存块的方式包括:

若所述所需分配的内存容量在所述预设内存块的容量范围内,且所述第一内存区的可用内存容量大于所述所需分配的内存容量,从第一内存区分配相应容量的预设内存块;

若所述所需分配的内存容量在所述预设内存块的容量范围内,且所述第一内存区的可用内存容量小于所述所需分配的内存容量,从第二内存区分配相应容量的预设内存块;

若所述所需分配的内存容量不在所述预设内存块的容量范围内,从第一内存区或第二内存区分配相应容量的内存块。

在本实施例中,所述分配模块240用于执行图2中的步骤s140,关于所述分配模块240的具体描述可以参照图2中步骤s140的描述。

请参照图7,图7是本发明较佳实施例提供的内存分配装置200的方框示意图之二。所述内存分配装置200还可以包括配置模块210。

配置模块210,用于对所述电子设备100的内存进行配置,将所述电子设备100的内存配置为第一内存区和第二内存区。

在本实施例中,所述配置模块210用于执行图3中的步骤s110,关于所述配置模块210的具体描述可以参照图3中步骤s110的描述。

请再次参照图7,所述内存分配装置200还可以包括容量调整模块250。容量调整模块250,用于对所述第一内存区的总容量进行调整。

所述容量调整模块250可以包括:

检测子模块251,用于对所述第一内存区中的可用容量进行检测;

调整子模块252,用于根据所述第一内存区中的可用容量与所述第一内存区的总容量的占比,在预设可调容量范围内调整所述第一内存区的总容量。

其中,调整子模块252根据所述第一内存区中的可用容量与所述第一内存区的总容量的占比,在预设可调容量范围内调整所述第一内存区的总容量的方式包括:

当所述占比小于第一预设值时,增大所述第一内存区的总容量;

当所述占比大于第二预设值时,减小所述第一内存区的总容量,其中,所述第二预设值大于所述第一预设值。

在本实施中,所述容量调整模块250用于执行图4中的步骤s150,关于所述容量调整模块250的具体描述可以参照图4中步骤s150的描述。

本发明较佳实施例还提供一种可读存储介质,所述可读存储介质包括计算机程序,所述计算机程序运行时控制所述可读存储介质所在电子设备100执行上述内存分配方法。具体描述可以参照对内存分配方法的描述。

综上所述,本发明实施例提供一种内存分配方法、装置、电子设备及可读存储介质。所述方法应用于电子设备。所述电子设备接收内存分配请求,其中,所述分配请求中包括所需分配的内存容量。在将所述所需分配的内存容量与预设内存块的容量范围进行比较后,得到一比较结果。从而根据所述比较结果从第一内存区或第二内存区分配相应容量的内存块,以将不同大小的内存块分开管理。由此降低目前由于不同大小的内存块混合使用而发生碎片化的几率。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1