CN111708715B - 内存分配方法、内存分配装置及终端设备 - Google Patents
内存分配方法、内存分配装置及终端设备 Download PDFInfo
- Publication number
- CN111708715B CN111708715B CN202010553737.1A CN202010553737A CN111708715B CN 111708715 B CN111708715 B CN 111708715B CN 202010553737 A CN202010553737 A CN 202010553737A CN 111708715 B CN111708715 B CN 111708715B
- Authority
- CN
- China
- Prior art keywords
- memory
- target
- address
- preset
- idle
- 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
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/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0253—Garbage collection, i.e. reclamation of unreferenced memory
-
- 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45583—Memory management, e.g. access or allocation
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System (AREA)
Abstract
本申请提供的一种内存分配方法,包括:当检测到内存分配请求时,在目标内存空间中,查找目标空闲内存,其中,所述内存分配请求用于请求分配大小为预设大小的内存,所述目标空闲内存的大小不小于所述预设大小;若目标内存空间中存在目标空闲内存,则在所述目标空闲内存中,查找目标地址,其中,所述目标地址符合预设对齐条件;若所述目标空闲内存中存在所述目标地址,则根据所述目标地址分配内存。通过上述方法,可以减少对内存空间的浪费,从而提高内存分配时的内存利用率。
Description
技术领域
本申请属于内存处理技术领域,尤其涉及内存分配方法、内存分配装置、终端设备及计算机可读存储介质。
背景技术
在内存使用过程中,为了提高内存的读取效率,在分配内存时,往往需要根据要存储的数据的类型或者预设的要求等,以内存对齐的方式来分配内存空间。因此,在分配内存时,为了确保满足内存对齐的要求,所要查找的空闲内存的空间大小不能小于“分配大小+对齐大小-1”;例如,所要求分配的内存大小为2M,而内存对齐的要求为1M对齐,此时,常用的内存分配方式中,所要查找的空闲内存的空间大小不能小于“2M+1M-1”。然而,这一分配方式可能导致对内存空间的浪费,从而导致内存分配时的内存利用率降低。
发明内容
本申请实施例提供了内存分配方法、内存分配装置、终端设备及计算机可读存储介质,可以减少对内存空间的浪费,从而提高内存分配时的内存利用率。
第一方面,本申请实施例提供了一种内存分配方法,包括:
当检测到内存分配请求时,在目标内存空间中,查找目标空闲内存,其中,上述内存分配请求用于请求分配大小为预设大小的内存,上述目标空闲内存的大小不小于上述预设大小;
若目标内存空间中存在目标空闲内存,则在上述目标空闲内存中,查找目标地址,其中,上述目标地址符合预设对齐条件;
若上述目标空闲内存中存在上述目标地址,则根据上述目标地址分配内存。
第二方面,本申请实施例提供了一种内存分配装置,包括:
第一查找模块,用于当检测到内存分配请求时,在目标内存空间中,查找目标空闲内存,其中,上述内存分配请求用于请求分配大小为预设大小的内存,上述目标空闲内存的大小不小于上述预设大小;
第二查找模块,用于若目标内存空间中存在目标空闲内存,则在上述目标空闲内存中,查找目标地址,其中,上述目标地址符合预设对齐条件;
分配模块,用于若上述目标空闲内存中存在上述目标地址,则根据上述目标地址分配内存。
第三方面,本申请实施例提供了一种终端设备,包括存储器、处理器、显示器以及存储在上述存储器中并可在上述处理器上运行的计算机程序,其特征在于,上述处理器执行上述计算机程序时实现如第一方面上述的内存分配方法。
第四方面,本申请实施例提供了一种计算机可读存储介质,上述计算机可读存储介质存储有计算机程序,上述计算机程序被处理器执行时实现如第一方面上述的内存分配方法。
第五方面,本申请实施例提供了一种计算机程序产品,当计算机程序产品在终端设备上运行时,使得终端设备执行上述第一方面中上述的内存分配方法。
本申请实施例与现有技术相比存在的有益效果是:本申请实施例中,当检测到内存分配请求时,可以在目标内存空间中,查找不小于请求分配的预设大小的目标空闲内存;并在查找到目标空闲内存之后,在上述目标空闲内存中,查找目标地址;若上述目标空闲内存中存在上述目标地址,则根据上述目标地址分配内存。本实施例中,所要查找的目标空闲内存的大小可以无需为了保证内存对齐而不小于“分配大小+对齐大小-1”的空闲内存,从而减小了对内存空间的浪费,避免了在存在能够符合内存分配请求,但相应的内存空间小于“分配大小+对齐大小-1”的空闲内存时,内存分配依然失败等情况,从而提高内存分配时的内存利用率。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请一实施例提供的一种内存分配方法的流程示意图;
图2是本申请一实施例提供的步骤S102的一种流程示意图;
图3是本申请一实施例提供的步骤S102的另一种流程示意图;
图4是本申请一实施例提供的一种内存分配装置的结构示意图;
图5是本申请一实施例提供的终端设备的结构示意图。
具体实施方式
以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本申请实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本申请。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本申请的描述。
应当理解,当在本申请说明书和所附权利要求书中使用时,术语“包括”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在本申请说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
如在本申请说明书和所附权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。
在本申请说明书中描述的参考“一个实施例”或“一些实施例”等意味着在本申请的一个或多个实施例中包括结合该实施例描述的特定特征、结构或特点。由此,在本说明书中的不同之处出现的语句“在一个实施例中”、“在一些实施例中”、“在其他一些实施例中”、“在另外一些实施例中”等不是必然都参考相同的实施例,而是意味着“一个或多个但不是所有的实施例”,除非是以其他方式另外特别强调。术语“包括”、“包含”、“具有”及它们的变形都意味着“包括但不限于”,除非是以其他方式另外特别强调。
本申请实施例提供的内存分配方法可以应用于服务器、台式电脑、手机、平板电脑、可穿戴设备、车载设备、增强现实(augmented reality,AR)/虚拟现实(virtualreality,VR)设备、笔记本电脑、超级移动个人计算机(ultra-mobile personal computer,UMPC)、上网本、个人数字助理(personal digital assistant,PDA)等终端设备上,本申请实施例对终端设备的具体类型不作任何限制。
具体地,图1示出了本申请实施例提供的一种内存分配方法的流程图,该内存分配方法可以应用于终端设备。
该内存分配方法可以包括:
步骤S101,当检测到内存分配请求时,在目标内存空间中,查找目标空闲内存,其中,上述内存分配请求用于请求分配大小为预设大小的内存,上述目标空闲内存的大小不小于上述预设大小。
本申请实施例中,上述内存分配请求所请求的内存为可以以内存对齐的方式进行数据存储的内存。其中,上述内存对齐可以指数据进行存储时,该数据存储的起始地址相对于相应的存储结构的起始地址的偏移量为指定值的倍数,其中,该指定值可以为该数据所对应的变量类型所占用的字节数或者系统的预先设定值。
本实施例中,上述目标内存空间可以基于上述内存分配请求来确定。示例性的,在一种实施例中,上述内存分配请求为预设应用所发出的请求,以请求在预设进程中分配预设大小的虚拟内存,则此时,上述目标内存空间可以为上述预设进程所对应的虚拟内存空间。在目标内存空间中,查找目标空闲内存的具体方式也可以由多种。例如,可以通过记录上述目标内存空间的空间信息的链表、空间树等来查找上述目标空闲内存。并且,具体的,可以从上述目标内存空间的头部向上述目标内存空间的尾部的方向进行查找,也可以从上述目标内存空间的尾部向上述目标内存空间的头部的方向进行查找。具体的查找方式在此不作限定。
其中,根据实际应用场景需求,上述内存分配请求可以用于请求分配虚拟内存,也可以用于请求分配物理内存。
在一些实施例中,上述目标内存空间为虚拟内存空间。
一些实施例中,上述目标内存空间可以为上述虚拟内存空间,此时,在诸如预设进程中,上述虚拟内存空间可以为地址连续的空间,因此,为了提高对虚拟内存的读取效率,可以在分配上述虚拟内存时,根据具体的存储数据所涉及的变量类型,采用内存对齐的方式进行分配。而在一些应用场景中,物理内存往往是基于物理页的形式进行物理内存的分配,从而不以内存对齐的形式进行分配。当然,基于具体需要,上述物理内存的分配方式可以随着物理内存的具体形式而变化,从而也可以应用本申请实施例进行内存分配,本实施例在此不作限定。
在一些实施例中,上述在目标内存空间中,查找目标空闲内存的操作可以在查找到上述目标空闲内存之后停止,或者,可以在遍历上述目标内存空间之后停止。
步骤S102,若目标内存空间中存在目标空闲内存,则在上述目标空闲内存中,查找目标地址。
本申请实施例中,若在上述目标内存空间中查找到上述目标空闲内存,则可以进一步在上述目标空闲内存中,查找目标地址,以使得后续所分配的内存能够满足对齐要求。其中,上述预设对齐条件可以根据与上述内存分配请求相关联的存储数据的变量类型和/或预设系统设置等信息来确定。例如,上述预设对齐条件指上述目标地址相对于相应的目标内存空间的起始地址的偏移量为指定值的倍数,其中,该指定值可以为上述内存分配请求所对应的变量类型所对应的字节数或者系统的预先设定值。
步骤S103,若上述目标空闲内存中存在上述目标地址,则根据上述目标地址分配内存。
本申请实施例中,可以将上述目标地址作为所分配的内存的起始地址。此时,所分配的内存在进行数据存储时,直接从起始地址开始进行存储即可实现内存对齐的要求。
现有的内存分配方式中,所要查找的空闲内存的空间大小不能小于“分配大小+对齐大小-1”的要求,例如,所要求分配的内存大小为2M,而内存对齐的要求为1M对齐,此时,现有的内存分配方式中,所要查找的空闲内存的空间大小不能小于“2M+1M-1”,从而导致内存空间的浪费。
相比于现有的内存分配方式,通过本申请实施例,可以在目标内存空间中查找不小于预设大小的内存,从而往往可以更快地查找到目标空闲内存,减小查找时长,提高查找效率,并且可以分配得到与预设大小更接近的内存,减小了对内存空间的浪费。
此外,现有的内存分配方式中,若存在符合内存分配请求,但大小不小于预设大小且小于“分配大小+对齐大小-1”的空闲内存时,在上述目标内存空间中查找时会跳过该空闲内存,从而使得内存空间更为碎片化;并且,若只剩下大小不小于预设大小,但小于“分配大小+对齐大小-1”的空闲内存,即使该空闲内存符合内存分配请求,也还是会出现内存分配失败的情况。而通过本申请实施例,可以分配到大小更为合适的空闲内存,使得内存的利用率提高,并可以提高内存分配的成功率。
在一些实施例中,上述若目标内存空间中存在目标空闲内存,则在上述目标空闲内存中,查找目标地址,包括:
步骤S201,若目标内存空间中,存在大小等于上述预设大小的目标空闲内存,则判断上述目标空闲内存的起始地址是否符合上述预设对齐条件;
步骤S202,若上述目标空闲内存的起始地址符合上述预设对齐条件,则确定上述目标空闲内存的起始地址为上述目标地址。
本申请实施例中,若目标内存空间中,存在大小等于上述预设大小的目标空闲内存,则判断上述目标空闲内存的起始地址是否符合上述预设对齐条件即可判断上述目标空闲内存是否符合上述内存分配请求的需求。
在一些实施例中,上述若目标内存空间中存在目标空闲内存,则在上述目标空闲内存中,查找目标地址,包括:
步骤S301,若目标内存空间中,存在大小大于上述预设大小的目标空闲内存,则从上述目标空闲内存的起始地址起,依次判断上述目标空闲内存中的各个地址是否符合预设对齐条件;
步骤S302,若上述目标空闲内存中,存在符合预设对齐条件的地址,则判断内存子空间的大小是否不小于上述预设大小,其中,上述内存子空间为上述目标空闲内存中的符合预设对齐条件的地址与上述目标空闲内存的尾部地址之间的内存空间;
步骤S303,若上述内存子空间的大小不小于上述预设大小,则确定上述目标空闲内存中的符合预设对齐条件的地址为上述目标地址。
本申请实施例中,若目标内存空间中,存在大小大于上述预设大小的目标空闲内存,则可以在上述目标空闲内存中查找符合预设对齐条件的地址,并可以在查找到符合预设对齐条件的地址之后,进一步的,确定上述目标空闲内存中的符合预设对齐条件的地址能否将上述目标空闲内存分割得到能够符合内存分配请求的内存子空间。其中,若上述目标空闲内存中的符合预设对齐条件的地址与上述目标空闲内存的尾部地址之间的内存空间的大小不小于上述预设大小,则此时,上述目标空闲内存中的符合预设对齐条件的地址可以作为后续分配的内存的起始地址。
在一些实施例中,上述若目标内存空间中,存在大小大于上述预设大小的目标空闲内存,则从上述目标空闲内存的起始地址起,依次判断上述目标空闲内存中的各个地址是否符合预设对齐条件,包括:
若目标内存空间中,存在大小大于上述预设大小的目标空闲内存,则从上述目标空闲内存的起始地址起,依次判断上述目标空闲内存的目标空闲空间中的各个地址是否符合预设对齐条件,直到查找到符合预设对齐条件的地址,或者,直到遍历上述目标空闲空间,其中,上述目标空闲空间为上述目标空闲内存中,从上述目标空闲内存的尾部减去上述预设大小的内存之后的剩余空间。
本申请实施例中,上述目标空闲空间可以基于上述预设大小和上述目标空闲内存的大小来确定。此时,若在上述目标空闲空间内查找到符合预设对齐条件的地址,则可以认为将上述目标空闲内存中的符合预设对齐条件的地址作为要分配的内存的起始地址既能够满足内存对齐的要求,也能够满足内存分配请求中对要分配的内存的大小的要求。因此,通过本申请实施例,可以在上述目标空闲空间中查找符合预设对齐条件的地址,从而减小查找范围,提升查找效率,能够更快速准确地获取到目标地址以进行后续的内存分配。
在一些实施例中,上述若目标内存空间中存在目标空闲内存,则在上述目标空闲内存中,查找目标地址,包括:
若目标内存空间中存在目标空闲内存,则在上述目标空闲内存中,查找相对于上述目标内存空间的起始地址的偏移为预设数值的整数倍的地址;
将查找到的相对于上述目标内存空间的起始地址的偏移为预设数值的整数倍的地址作为上述目标地址。
本申请实施例中,上述预设数值可以为与上述内存分配请求相关联的变量类型所对应的字节数或者用户预先设定值。该用户预先设定值可以为相应的系统开发人员预先设定的,也可以是当前的使用用户等预先设定的。
例如,若与上述内存分配请求相关联的变量类型为double类型,而double类型所对应的字节数为8,则上述预设对齐条件可以指上述目标地址相对于相应的目标内存空间的起始地址的偏移量为8的倍数,如8、16、32等等。此外,上述预设数值也可以是系统或者用户根据实际需求预先设置的,例如,上述预设数值可以为1M,此时,上述预设对齐条件可以指上述目标地址相对于相应的目标内存空间的起始地址的偏移量为1M的倍数。
在一些实施例中,上述当检测到内存分配请求时,在目标内存空间中,查找目标空闲内存,包括:
当检测到内存分配请求时,若上述预设数值大于预设阈值,则在目标内存空间中,查找目标空闲内存。
本申请实施例中,在检测到上述内存分配请求时,可以根据预设对齐条件的具体要求来确定进行空闲内存查找的具体方式。例如,在一些示例中,上述预设对齐条件所对应的预设数值较小,如为2KB、8KB等等,则在可以在目标内存空间中查找大小不小于上述预设大小加上上述预设数值再减去1KB所得到的数值(即第一数值)的空闲内存;此时,若查询到大小不小于上述第一数值的空闲内存,则可以确定该空闲内存能够符合上述内存分配请求,并且由于上述预设数值较小,通过这一查询方式所造成的空间浪费也较小,但分配效率较高。而在一些情况下,上述预设对齐条件所对应的预设数值较大,如为1M或者更大的值,因此该预设数值所对应的第一数值也较大,若在上述目标空闲内存中查询大小不小于上述第一数值的空闲内存以进行分配,常常会导致较大的内存浪费,大大降低内存利用率,并且,由于该预设数值较大,通过现有方式进行空闲内存查询时所要查询的空闲内存的大小也较大,会相应地增加查询失败的可能性。因此,本申请实施例中,在检测到上述预设数值大于预设阈值时,在目标内存空间中查找目标空闲内存,可以提高内存的利用率,同时减少了分配失败的可能性。
在一些实施例中,上述当检测到内存分配请求时,在目标内存空间中,查找目标空闲内存,包括:
当检测到上述内存分配请求时,获取上述目标内存空间的当前利用率;
若上述当前利用率大于预设利用率,则在上述目标内存空间中,查找大小不小于第一数值的第一空闲内存,并在查找上述第一空闲内存的过程中,查找大小小于第一数值且大于上述预设数值的第二空闲内存,其中,上述第一数值为上述预设大小与上述预设数值相加再减去1KB之后所得到的值;
若在查找上述第一空闲内存的过程中查找到至少一个上述第二空闲内存,则对查找到的上述第二空闲内存进行记录;
若在上述目标内存空间中未查找到上述第一空间内存,则将记录的上述第二空闲内存中的一个作为上述目标空闲内存。
通过本申请实施例,可以在目标内存空间的当前利用率较高时,最多对目标内存空间执行一次遍历查询,就可以确定出是否能够根据内存分配请求进行内存分配,同时,可以通过这一次遍历查询出更合理的可分配空闲内存。
其中,具体地,可以根据上述目标内存空间的当前利用率确定具体的内存查询方式。若上述目标内存空间的当前利用率较高,则可查询到的空闲空间较少,为了提高内存分配的成功率,可以在上述目标内存空间中,查找大小不小于第一数值的第一空闲内存,并在查找上述第一空闲内存的过程中,查找大小小于第一数值且大于上述预设数值的第二空闲内存。
示例性的,对于上述目标空闲空间中的任一待分配空闲内存,可以判断该待分配空闲内存的大小是否不小于上述第一数值,若上述待分配空闲内存的大小不小于上述第一数值,则将根据上述内存分配请求分配上述待分配空闲内存;若上述待分配空闲内存的大小小于上述第一数值,则判断上述待分配空闲内存的大小是否大于上述预设数值;若上述待分配空闲内存大于上述预设数值,则可以确定查找到上述第二空闲内存。此时,可以在预设列表、文本等中记录上述第二空闲内存的地址。可见,通过本申请实施例,可以优先查找第一空闲内存,此时,由于上述第一空闲内存中必然存在满足上述预设对齐条件的目标地址,因此,根据上述第一空闲内存进行分配可以避免由于目标地址查找失败而导致的重复查找操作,提升分配效率。然而,由于此时目标内存空间的利用率较高,因此,可能难以查找到大小较大的上述第一空闲内存,此时,可以进一步在所记录的第二空闲内存中查找目标空闲内存,而无需重新对目标内存空间进行重新搜索。其中,若记录有多个第二空闲内存,则可以根据记录的先后顺序,依次在记录的多个第二空闲内存中查找能够符合上述内存分配请求的内存;此外,根据具体的应用场景需求,也可以基于各个第二空闲内存的大小由大到小或者由小到大的顺序,依次在记录的多个第二空闲内存中查找能够符合上述内存分配请求的内存。
可见,通过本申请实施例,既可以保证较高的分配成功率,又可以保证较高的内存分配速度。
本申请实施例中,当检测到内存分配请求时,可以在目标内存空间中,查找不小于请求分配的预设大小的目标空闲内存;并在查找到目标空闲内存之后,在上述目标空闲内存中,查找目标地址;若上述目标空闲内存中存在上述目标地址,则根据上述目标地址分配内存。本实施例中,所要查找的目标空闲内存的大小可以无需为了保证内存对齐而不小于“分配大小+对齐大小-1”的空闲内存,从而减小了对内存空间的浪费,避免了在存在能够符合内存分配请求,但相应的内存空间小于“分配大小+对齐大小-1”的空闲内存时,内存分配依然失败等情况,从而提高内存分配时的内存利用率。
应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
对应于上文实施例上述的内存分配方法,图4示出了本申请实施例提供的一种内存分配装置的结构框图,为了便于说明,仅示出了与本申请实施例相关的部分。
参照图4,该内存分配装置4包括:
第一查找模块401,用于当检测到内存分配请求时,在目标内存空间中,查找目标空闲内存,其中,上述内存分配请求用于请求分配大小为预设大小的内存,上述目标空闲内存的大小不小于上述预设大小;
第二查找模块402,用于若目标内存空间中存在目标空闲内存,则在上述目标空闲内存中,查找目标地址,其中,上述目标地址符合预设对齐条件;
分配模块403,用于若上述目标空闲内存中存在上述目标地址,则根据上述目标地址分配内存。
可选的,上述第二查找模块402具体包括:
第一判断单元,用于若目标内存空间中,存在大小等于上述预设大小的目标空闲内存,则判断上述目标空闲内存的起始地址是否符合上述预设对齐条件;
第一确定单元,用于若上述目标空闲内存的起始地址符合上述预设对齐条件,则确定上述目标空闲内存的起始地址为上述目标地址。
可选的,上述第二查找模块402具体包括:
第二判断单元,用于若目标内存空间中,存在大小大于上述预设大小的目标空闲内存,则从上述目标空闲内存的起始地址起,依次判断上述目标空闲内存中的各个地址是否符合预设对齐条件;
第三判断单元,用于若上述目标空闲内存中,存在符合预设对齐条件的地址,则判断内存子空间的大小是否不小于上述预设大小,其中,上述内存子空间为上述目标空闲内存中的符合预设对齐条件的地址与上述目标空闲内存的尾部地址之间的内存空间;
第二确定单元,用于若上述内存子空间的大小不小于上述预设大小,则确定上述目标空闲内存中的符合预设对齐条件的地址为上述目标地址。
可选的,上述第二判断单元具体用于:
若目标内存空间中,存在大小大于上述预设大小的目标空闲内存,则从上述目标空闲内存的起始地址起,依次判断上述目标空闲内存的目标空闲空间中的各个地址是否符合预设对齐条件,直到查找到符合预设对齐条件的地址,或者,直到遍历上述目标空闲空间,其中,上述目标空闲空间为上述目标空闲内存中,从上述目标空闲内存的尾部减去上述预设大小的内存之后的剩余空间。
可选的,上述目标内存空间为虚拟内存空间。
可选的,上述第二查找模块402具体包括:
第一查找单元,用于若目标内存空间中存在目标空闲内存,则在上述目标空闲内存中,查找相对于上述目标内存空间的起始地址的偏移为预设数值的整数倍的地址;
第一处理单元,用于将查找到的相对于上述目标内存空间的起始地址的偏移为预设数值的整数倍的地址作为上述目标地址。
可选的,上述第一查找模块401具体用于:
当检测到内存分配请求时,若上述预设数值大于预设阈值,则在目标内存空间中,查找目标空闲内存。
可选的,上述第一查找模块401具体包括:
获取单元,用于当检测到上述内存分配请求时,获取上述目标内存空间的当前利用率;
第二查找单元,用于若上述当前利用率大于预设利用率,则在上述目标内存空间中,查找大小不小于第一数值的第一空闲内存,并在查找上述第一空闲内存的过程中,查找大小小于第一数值且大于上述预设数值的第二空闲内存,其中,上述第一数值为上述预设大小与上述预设数值相加再减去1KB之后所得到的值;
记录单元,用于若在查找上述第一空闲内存的过程中查找到至少一个上述第二空闲内存,则对查找到的上述第二空闲内存进行记录;
第二处理单元,用于若在上述目标内存空间中未查找到上述第一空间内存,则将记录的上述第二空闲内存中的一个作为上述目标空闲内存。
本申请实施例中,当检测到内存分配请求时,可以在目标内存空间中,查找不小于请求分配的预设大小的目标空闲内存;并在查找到目标空闲内存之后,在上述目标空闲内存中,查找目标地址;若上述目标空闲内存中存在上述目标地址,则根据上述目标地址分配内存。本实施例中,所要查找的目标空闲内存的大小可以无需为了保证内存对齐而不小于“分配大小+对齐大小-1”的空闲内存,从而减小了对内存空间的浪费,避免了在存在能够符合内存分配请求,但相应的内存空间小于“分配大小+对齐大小-1”的空闲内存时,内存分配依然失败等情况,从而提高内存分配时的内存利用率。
需要说明的是,上述装置/单元之间的信息交互、执行过程等内容,由于与本申请方法实施例基于同一构思,其具体功能及带来的技术效果,具体可参见方法实施例部分,此处不再赘述。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将上述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
图5为本申请一实施例提供的终端设备的结构示意图。如图5所示,该实施例的终端设备5包括:至少一个处理器50(图5中仅示出一个)、存储器51以及存储在上述存储器51中并可在上述至少一个处理器50上运行的计算机程序52,上述处理器50执行上述计算机程序52时实现上述任意各个内存分配方法实施例中的步骤。
上述终端设备5可以是服务器、手机、可穿戴设备、增强现实(augmented reality,AR)/虚拟现实(virtual reality,VR)设备、桌上型计算机、笔记本、台式电脑以及掌上电脑等计算设备。该终端设备可包括,但不仅限于,处理器50、存储器51。本领域技术人员可以理解,图5仅仅是终端设备5的举例,并不构成对终端设备5的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如还可以包括输入设备、输出设备、网络接入设备等。其中,上述输入设备可以包括键盘、触控板、指纹采集传感器(用于采集用户的指纹信息和指纹的方向信息)、麦克风、摄像头等,输出设备可以包括显示器、扬声器等。
上述处理器50可以是中央处理单元(Central Processing Unit,CPU),该处理器50还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
上述存储器51在一些实施例中可以是上述终端设备5的内部存储单元,例如终端设备5的硬盘或内存。上述存储器51在另一些实施例中也可以是上述终端设备5的外部存储设备,例如上述终端设备5上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,上述存储器51还可以既包括上述终端设备5的内部存储单元也包括外部存储设备。上述存储器51用于存储操作系统、应用程序、引导装载程序(Boot Loader)、数据以及其他程序等,例如上述计算机程序的程序代码等。上述存储器51还可以用于暂时地存储已经输出或者将要输出的数据。
另外,尽管未示出,上述终端设备5还可以包括网络连接模块,如蓝牙模块Wi-Fi模块、蜂窝网络模块等等,在此不再赘述。
本申请实施例中,上述处理器50执行上述计算机程序52以实现上述任意各个内存分配方法实施例中的步骤时,当检测到内存分配请求时,可以在目标内存空间中,查找不小于请求分配的预设大小的目标空闲内存;并在查找到目标空闲内存之后,在上述目标空闲内存中,查找目标地址;若上述目标空闲内存中存在上述目标地址,则根据上述目标地址分配内存。本实施例中,所要查找的目标空闲内存的大小可以无需为了保证内存对齐而不小于“分配大小+对齐大小-1”的空闲内存,从而减小了对内存空间的浪费,避免了在存在能够符合内存分配请求,但相应的内存空间小于“分配大小+对齐大小-1”的空闲内存时,内存分配依然失败等情况,从而提高内存分配时的内存利用率。
本申请实施例还提供了一种计算机可读存储介质,上述计算机可读存储介质存储有计算机程序,上述计算机程序被处理器执行时实现可实现上述各个方法实施例中的步骤。
本申请实施例提供了一种计算机程序产品,当计算机程序产品在终端设备上运行时,使得终端设备执行时实现可实现上述各个方法实施例中的步骤。
上述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实现上述实施例方法中的全部或部分流程,可以通过计算机程序来指令相关的硬件来完成,上述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,上述计算机程序包括计算机程序代码,上述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。上述计算机可读介质至少可以包括:能够将计算机程序代码携带到拍照装置/终端设备的任何实体或装置、记录介质、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,RandomAccess Memory)、电载波信号、电信信号以及软件分发介质。例如U盘、移动硬盘、磁碟或者光盘等。在某些司法管辖区,根据立法和专利实践,计算机可读介质不可以是电载波信号和电信信号。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
在本申请所提供的实施例中,应该理解到,所揭露的装置/网络设备和方法,可以通过其它的方式实现。例如,以上所描述的装置/网络设备实施例仅仅是示意性的,例如,上述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。
上述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
以上上述实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围,均应包含在本申请的保护范围之内。
Claims (8)
1.一种内存分配方法,其特征在于,包括:
当检测到内存分配请求时,在目标内存空间中,查找目标空闲内存,其中,所述内存分配请求用于请求分配大小为预设大小的内存,所述目标空闲内存的大小不小于所述预设大小;
若目标内存空间中存在目标空闲内存,则在所述目标空闲内存中,查找目标地址,其中,所述目标地址符合预设对齐条件;
若所述目标空闲内存中存在所述目标地址,则根据所述目标地址分配内存,具体的:将所述目标地址作为所分配的内存的起始地址;
其中,所述若目标内存空间中存在目标空闲内存,则在所述目标空闲内存中,查找目标地址,包括:
若目标内存空间中,存在大小大于所述预设大小的目标空闲内存,则从所述目标空闲内存的起始地址起,依次判断所述目标空闲内存中的各个地址是否符合预设对齐条件;
若所述目标空闲内存中,存在符合预设对齐条件的地址,则判断内存子空间的大小是否不小于所述预设大小,其中,所述内存子空间为所述目标空闲内存中的符合预设对齐条件的地址与所述目标空闲内存的尾部地址之间的内存空间;
若所述内存子空间的大小不小于所述预设大小,则确定所述目标空闲内存中的符合预设对齐条件的地址为所述目标地址;
所述若目标内存空间中存在目标空闲内存,则在所述目标空闲内存中,查找目标地址,还包括:
若目标内存空间中存在目标空闲内存,则在所述目标空闲内存中,查找相对于所述目标内存空间的起始地址的偏移为预设数值的整数倍的地址;
将查找到的相对于所述目标内存空间的起始地址的偏移为预设数值的整数倍的地址作为所述目标地址。
2.如权利要求1所述的内存分配方法,其特征在于,所述若目标内存空间中存在目标空闲内存,则在所述目标空闲内存中,查找目标地址,包括:
若目标内存空间中,存在大小等于所述预设大小的目标空闲内存,则判断所述目标空闲内存的起始地址是否符合所述预设对齐条件;
若所述目标空闲内存的起始地址符合所述预设对齐条件,则确定所述目标空闲内存的起始地址为所述目标地址。
3.如权利要求1所述的内存分配方法,其特征在于,所述若目标内存空间中,存在大小大于所述预设大小的目标空闲内存,则从所述目标空闲内存的起始地址起,依次判断所述目标空闲内存中的各个地址是否符合预设对齐条件,包括:
若目标内存空间中,存在大小大于所述预设大小的目标空闲内存,则从所述目标空闲内存的起始地址起,依次判断所述目标空闲内存的目标空闲空间中的各个地址是否符合预设对齐条件,直到查找到符合预设对齐条件的地址,或者,直到遍历所述目标空闲空间,其中,所述目标空闲空间为所述目标空闲内存中,从所述目标空闲内存的尾部减去所述预设大小的内存之后的剩余空间。
4.如权利要求1-3任一项所述的内存分配方法,其特征在于,所述当检测到内存分配请求时,在目标内存空间中,查找目标空闲内存,包括:
当检测到内存分配请求时,若所述预设数值大于预设阈值,则在目标内存空间中,查找目标空闲内存。
5.如权利要求1-3任一项所述的内存分配方法,其特征在于,所述当检测到内存分配请求时,在目标内存空间中,查找目标空闲内存,包括:
当检测到所述内存分配请求时,获取所述目标内存空间的当前利用率;
若所述当前利用率大于预设利用率,则在所述目标内存空间中,查找大小不小于第一数值的第一空闲内存,并在查找所述第一空闲内存的过程中,查找大小小于第一数值且大于所述预设数值的第二空闲内存,其中,所述第一数值为所述预设大小与所述预设数值相加再减去1KB之后所得到的值;
若在查找所述第一空闲内存的过程中查找到至少一个所述第二空闲内存,则对查找到的所述第二空闲内存进行记录;
若在所述目标内存空间中未查找到所述第一空闲内存,则将记录的所述第二空闲内存中的一个作为所述目标空闲内存。
6.一种内存分配装置,其特征在于,包括:
第一查找模块,用于当检测到内存分配请求时,在目标内存空间中,查找目标空闲内存,其中,所述内存分配请求用于请求分配大小为预设大小的内存,所述目标空闲内存的大小不小于所述预设大小;
第二查找模块,用于若目标内存空间中存在目标空闲内存,则在所述目标空闲内存中,查找目标地址,其中,所述目标地址符合预设对齐条件;
分配模块,用于若所述目标空闲内存中存在所述目标地址,则根据所述目标地址分配内存,具体的:将所述目标地址作为所分配的内存的起始地址;
其中,所述若目标内存空间中存在目标空闲内存,则在所述目标空闲内存中,查找目标地址,包括:
若目标内存空间中,存在大小大于所述预设大小的目标空闲内存,则从所述目标空闲内存的起始地址起,依次判断所述目标空闲内存中的各个地址是否符合预设对齐条件;
若所述目标空闲内存中,存在符合预设对齐条件的地址,则判断内存子空间的大小是否不小于所述预设大小,其中,所述内存子空间为所述目标空闲内存中的符合预设对齐条件的地址与所述目标空闲内存的尾部地址之间的内存空间;
若所述内存子空间的大小不小于所述预设大小,则确定所述目标空闲内存中的符合预设对齐条件的地址为所述目标地址;
所述若目标内存空间中存在目标空闲内存,则在所述目标空闲内存中,查找目标地址,还包括:
若目标内存空间中存在目标空闲内存,则在所述目标空闲内存中,查找相对于所述目标内存空间的起始地址的偏移为预设数值的整数倍的地址;
将查找到的相对于所述目标内存空间的起始地址的偏移为预设数值的整数倍的地址作为所述目标地址。
7.一种终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至5任一项所述的内存分配方法。
8.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至5任一项所述的内存分配方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010553737.1A CN111708715B (zh) | 2020-06-17 | 2020-06-17 | 内存分配方法、内存分配装置及终端设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010553737.1A CN111708715B (zh) | 2020-06-17 | 2020-06-17 | 内存分配方法、内存分配装置及终端设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111708715A CN111708715A (zh) | 2020-09-25 |
CN111708715B true CN111708715B (zh) | 2023-08-15 |
Family
ID=72541209
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010553737.1A Active CN111708715B (zh) | 2020-06-17 | 2020-06-17 | 内存分配方法、内存分配装置及终端设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111708715B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113568349B (zh) * | 2021-07-27 | 2023-05-02 | 深圳市轱辘车联数据技术有限公司 | 数据处理方法、装置、终端设备及可读存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109308280A (zh) * | 2017-07-26 | 2019-02-05 | 杭州华为数字技术有限公司 | 数据处理方法和相关设备 |
CN111090521A (zh) * | 2019-12-10 | 2020-05-01 | Oppo(重庆)智能科技有限公司 | 内存分配方法、装置、存储介质及电子设备 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE60328379D1 (de) * | 2003-07-30 | 2009-08-27 | Texas Instruments Inc | Reformatier-logik-schaltung zur Reformatierung eines Speicherzugriffs auf ein Gerät |
US10606741B2 (en) * | 2018-05-21 | 2020-03-31 | Air Technology Holdings Limited | Process for buddy allocation |
-
2020
- 2020-06-17 CN CN202010553737.1A patent/CN111708715B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109308280A (zh) * | 2017-07-26 | 2019-02-05 | 杭州华为数字技术有限公司 | 数据处理方法和相关设备 |
CN111090521A (zh) * | 2019-12-10 | 2020-05-01 | Oppo(重庆)智能科技有限公司 | 内存分配方法、装置、存储介质及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN111708715A (zh) | 2020-09-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111679921B (zh) | 内存共享方法、内存共享装置及终端设备 | |
CN111090628A (zh) | 一种数据处理方法、装置、存储介质及电子设备 | |
US9977598B2 (en) | Electronic device and a method for managing memory space thereof | |
CN104133780A (zh) | 一种跨页预取方法、装置及系统 | |
CN106534268B (zh) | 一种数据共享方法及装置 | |
WO2016037499A1 (zh) | 一种内存迁移方法及设备 | |
CN111737564A (zh) | 一种信息查询方法、装置、设备及介质 | |
CN111522574B (zh) | 差分包生成方法及相关设备 | |
US8751724B2 (en) | Dynamic memory reconfiguration to delay performance overhead | |
US20180137045A1 (en) | Automatic memory management using a memory management unit | |
CN111984204A (zh) | 一种数据读写方法、装置及电子设备和存储介质 | |
CN111708715B (zh) | 内存分配方法、内存分配装置及终端设备 | |
CN110022341B (zh) | 一种数据传输方法及相关设备 | |
CN112269665B (zh) | 内存的处理方法和装置、电子设备和存储介质 | |
CN109947667B (zh) | 数据访问预测方法和装置 | |
CN115774701B (zh) | 数据共享方法、装置、电子设备及存储介质 | |
CN108540569B (zh) | 一种软件安装包替换方法、装置及计算机存储介质 | |
CN110020290B (zh) | 网页资源缓存方法、装置、存储介质及电子装置 | |
CN109495432B (zh) | 一种匿名账户的鉴权方法及服务器 | |
CN112764897B (zh) | 任务请求的处理方法、装置、系统及计算机可读存储介质 | |
CN111679909B (zh) | 数据处理方法、装置及终端设备 | |
CN106991058B (zh) | 预取文件处理方法及装置 | |
CN109857719B (zh) | 分布式文件处理方法、装置、计算机设备以及存储介质 | |
CN113419792A (zh) | 一种事件处理方法、装置、终端设备和存储介质 | |
CN111831655B (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 |