CN116360979A - 内存分配方法、装置、电子设备及可读存储介质 - Google Patents
内存分配方法、装置、电子设备及可读存储介质 Download PDFInfo
- Publication number
- CN116360979A CN116360979A CN202310211123.9A CN202310211123A CN116360979A CN 116360979 A CN116360979 A CN 116360979A CN 202310211123 A CN202310211123 A CN 202310211123A CN 116360979 A CN116360979 A CN 116360979A
- Authority
- CN
- China
- Prior art keywords
- memory
- storage space
- memory block
- dynamic
- space
- 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
- 238000000034 method Methods 0.000 title claims abstract description 70
- 230000008569 process Effects 0.000 claims abstract description 19
- 230000004044 response Effects 0.000 claims description 2
- 230000026676 system process Effects 0.000 abstract description 5
- 238000004891 communication Methods 0.000 description 12
- 230000006870 function Effects 0.000 description 11
- 238000005516 engineering process Methods 0.000 description 5
- 238000010586 diagram Methods 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 4
- 230000005236 sound signal Effects 0.000 description 4
- 238000007726 management method Methods 0.000 description 3
- 230000001133 acceleration Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 238000011084 recovery Methods 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000005856 abnormality Effects 0.000 description 1
- 230000006978 adaptation Effects 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000003384 imaging method Methods 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
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
-
- 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/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
-
- 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是本发明实施例提供的一种内存分配方法步骤流程图;
图2是本发明实施例提供的又一种内存分配方法步骤流程图;
图3是本发明实施例提供的一种内存申请与释放的流程图
图4是本发明实施例提供的一种内存分配装置框图;
图5是本发明一个实施例的终端的框图;
图6是本发明另一个实施例的终端的结构示意图。
具体实施方式
下面将参照附图更详细地描述本发明的示例性实施例。虽然附图中显示了本发明的示例性实施例,然而应当理解,可以以各种形式实现本发明而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本发明,并且能够将本发明的范围完整的传达给本领域的技术人员。
参考图1,其示出了本申请实施例提供的内存分配方法的步骤流程图,应用于电子设备,所述内存块包括第一内存块和第二内存块,所述第一内存块为设置有基础动态存储空间的内存块,所述第二内存块为未设置有所述基础动态存储空间的内存块,所述方法包括:
步骤101,获取动态内存申请请求,所述动态内存申请请求指示待存储数据所申请内存的容量。
在本发明实施例中,获取系统中每个所述内存块的类型,通过对内存块的分析,确定内存块的数量、已使用的情况和内存块的存储容量。由于嵌入式系统中每个内存块可能分管着不同的系统功能,因此可以将分管着堆区功能,即内存的申请和释放功能的内存块,作为第一内存块,确定第一内存块的基础动态存储空间,基础动态存储空间用于动态内存的申请和释放。即第一内存块为原始分配的,设置有基础动态存储空间,用于满足程序运行中动态内存的申请和释放的内存块。将分管其他功能的内存块,如存放系统数据通信相关的业务功能的内存块确定为第二内存块。
在本发明实施例中,动态内存申请请求指示待存储数据所申请内存的容量,动态内存申请请求可以为程序运行时malloc函数所发起的请求,malloc函数用于申请一块连续的指定大小的内存块区域,当获取到动态内存申请请求时,系统可以根据动态内存申请请求所指示的申请的内存的容量,从第一内存块或第二内存块中确定可以满足动态内存申请请求的需求的存储空间。
步骤102,根据所述动态内存申请请求指示的待存储数据所申请内存的容量,从所述目标存储空间中划分待使用存储空间存储所述待存储数据,所述目标存储空间为所述第一内存块的基础动态存储空间和所述第二内存块的未划分存储空间共同构成的存储空间;所述基础动态存储空间用于动态内存的申请和释放;所述未划分存储空间为所述第二内存块中未被其他进程划分使用的存储空间。
在嵌入式系统中,程序任务的正常执行由系统进行统一的管理和调度,而系统又是运行在内存基础之上,通过动态的申请和释放内存实现正常运行。在内存上,每一块区域发挥着不同的功能作用,如:BSS段(Block Started by Symbol,由符号启始的区块),是用来存放程序中未初始化的全局变量的一块内存区域、数据段是用于存放程序中已初始化的全局变量的一块内存区域、代码段是用于存放程序执行代码的一块内存区域、堆区是用于存放进程运行中被动态分配的内存的一块存储区域、栈区用于存放程序临时创建的局部变量等。其中,堆区负责内存的申请和回收,堆区大小并不固定,可以动态扩张或缩减,但总的大小是有限的(堆区的总的大小为内存块总体的大小减去其它内存段大小)。当进程调用malloc(memory allocation,动态内存分配)等函数分配内存时(malloc用于申请一块连续的指定大小的内存块区域),新分配的内存就被动态添加到堆上,此时堆区被扩张;当利用free(释放内存的函数)等函数释放内存时,被释放的内存从堆中被剔除。
进一步地,在嵌入式系统中,系统的内存可能不是一个连续的整体,而是有多个内存块,每个内存块执行和发挥不同的作用。但在实际使用中,可能会出现某个模块被用尽依旧不够,而有的模块仅使用了一小部分的现象。在这种情况下,都可能会出现程序运行申请内存而申请不到抛出内存不足的异常问题。
在本发明实施例中,由于第一内存块难以满足程序运行所需的内存需求,直接对内存进行扩展或更换更大的内存增加成本,因此,可以获取每个第二内存块的未划分存储空间,将每个第二内存块的未划分存储空间与所述基础动态存储空间构成目标存储空间,目标存储空间为用于动态内存的申请与释放的空间。例如,以两个内存块(内存块1和内存块2)为例,内存块1和内存块2分别主管着不同的系统功能,具体可以是内存块1存放程序代码段和堆栈区,内存块2存放系统数据通信相关的业务功能。为了避免程序运行时内存不足的异常,可以通过确定内存块2的未划分存储空间,在系统初始化时,将内存块2的未划分存储空间初始化为可用于动态内存的申请和释放的存储空间,即将内存块2的未划分存储空间与内存块1的堆栈区挂载在一起。使得内存块2的未划分存储空间也可以作为内存申请时被分配的区域,以此提高程序运行的稳定性。本发明实施例中,第二内存块的数量可以为多个。
在根据动态内存申请请求确定了待存储数据所申请内存的容量后,系统可以先确定第一内存块的基础动态存储空间的可用存储空间是否可以满足动态内存申请请求的需求,若满足,则将基础动态存储空间中分配给动态内存申请请求的存储空间的地址和长度返回,若不满足,可以继续从第二内存块中确定是否有满足动态内存申请请求的存储空间,若存在第二内存块的未划分存储空间满足动态内存申请请求的需求,则同样返回第二内存块分配给动态内存申请请求的存储空间的地址和长度,若第一内存块和第二内存块均不能满足动态内存申请请求的内存需求,则可以返回内存申请失败的提示。
综上,本申请实施例中,在获得到动态内存申请请求时,从目标存储空间中确定存储待存储数据的待使用存储空间,其中,目标存储空间为所述第一内存块的基础动态存储空间和所述第二内存块的未划分存储空间共同构成的存储空间;所述基础动态存储空间用于动态内存的申请和释放;所述未划分存储空间为所述第二内存块中未被其他进程划分使用的存储空间。本申请在不扩展原有内存的情况下,通过将原先未设置有基础动态存储空间的内存块的未划分存储空间作为可用于内存的申请与释放的目标存储空间,使得在获得动态内存申请请求时,可以利用第二内存块的未划分存储空间作为待使用存储空间,充分利用了现有的内存空间,解决了系统进程或线程需要申请内存时出现的申请内存失败问题,提高了系统内存的使用效率和系统的稳定性。
参考图2,其示出了本申请实施例提供的又一种内存分配方法的步骤流程图,应用于电子设备,所述内存块包括第一内存块和第二内存块,所述第一内存块为设置有基础动态存储空间的内存块,所述第二内存块为未设置有所述基础动态存储空间的内存块,所述方法包括:
步骤201,获取动态内存申请请求,所述动态内存申请请求指示待存储数据所申请内存的容量。
此步骤可参考步骤101,此处不再赘述。
步骤202,获取目标存储空间中各个存储空间的可用容量,所述目标存储空间为所述第一内存块的基础动态存储空间和所述第二内存块的未划分存储空间共同构成的存储空间;所述基础动态存储空间用于动态内存的申请和释放;所述未划分存储空间为所述第二内存块中未被其他进程划分使用的存储空间。
在本发明实施例中,动态内存申请请求指示待存储数据所申请内存的容量,在存储时,需根据动态内存申请请求指示的待存储数据所申请内存的容量分配一块连续的存储空间。因此,需获取目标存储空间中各个存储空间的当前可用容量,以确定目标存储空间中的各个存储空间是否可以单独满足动态内存申请请求的需求。
步骤203,将所述目标存储空间中各个存储空间的可用容量中满足所述动态内存申请请求所申请的内存的容量的存储空间,确定为存储所述待存储数据的待使用存储空间;
在本发明实施例中,由于动态内存申请请求所申请的内存为一块连续的存储空间,因此单个存储空间的可用容量需大于动态内存申请请求所申请的内存的容量,才能作为存储待存储数据的待使用存储空间。
子步骤2031,若所述第一内存块的基础动态存储空间的可用容量满足所述动态内存申请请求所申请的内存的容量,则从所述第一内存块的基础动态存储空间中确定待使用存储空间。
子步骤2032,若所述第一内存块的基础动态存储空间的可用容量不满足所述动态内存申请请求所申请的内存的容量,则从所述第二内存块中确定待使用存储空间。
在本发明实施例中,在根据动态内存申请请求确定了待存储数据所申请内存的容量,系统可以先确定第一内存块的基础动态存储空间的可用存储空间是否可以满足动态内存申请请求的需求,若满足,则将分配给动态内存申请请求的存储空间的地址和长度返回,若不满足,可以继续从第二内存块的未划分存储空间中确定是否有满足动态内存申请请求的存储空间,若存在第二内存块的未划分存储空间的可用空间满足动态内存申请请求的需求,则同样返回第二内存块分配给动态内存申请请求的存储空间的地址和长度,若第一内存块和第二内存块均不能满足动态内存申请请求的内存需求,则可以返回内存申请失败的提示,例如,内存空间包括3个内存块,其中,内存块1的类型为第一内存块,内存块2、3的类型为第二内存块,内存块1的基础动态存储空间当前可用的容量为100字节,内存块2的可用内存为160字节,内存块3的可用内存为200字节,动态内存申请请求所请求的内存大小为150字节,那么可以确定内存块1不满足动态内存申请请求,接着判断内存块2是否可以满足动态内存申请请求,确定内存块2满足的情况下,将150字节大小的内存块的起始地址的长度返回。
步骤204,将所述待使用存储空间的起始地址和长度返回至申请方。
在本发明实施例中,确定了存储待存储数据的内存块的待使用存储空间的起始地址和长度后,可以将待使用存储空间的起始地址和长度返回至申请方,返回的分配给动态内存申请请求的存储空间的地址和长度与动态内存申请请求所指示的存储数据所述的内存的容量一致。
可选地,步骤201之前,所述方法还包括:
步骤205,响应于配置指令,确定第一内存块的基础动态存储空间。
此步骤可参考步骤101,此处不再赘述。
步骤206,获取每个所述第二内存块的未划分存储空间,将每个所述第二内存块的未划分存储空间与所述基础动态存储空间构成目标存储空间。
在本发明实施例中,将每个第二内存块的未划分存储空间与所述基础动态存储空间构成目标存储空间,目标存储空间为用于动态内存的申请与释放的空间,可参考步骤102的描述,此处不再赘述。需要说明的是,将第二内存块的未划分存储空间配置为可以实现动态内存的申请与释放的存储空间的配置过程,是系统上电后仅配置一次,后面可以应对多次内存申请。
可选地,步骤206具体包括:
子步骤2061,获取每个所述第二内存块的原始存储空间容量以及已划分的存储空间容量。
子步骤2062,根据所述原始存储空间容量以及已划分的存储空间容量确定每个所述第二内存块的未划分存储空间。
在本发明实施例中,第二内存块的未划分存储空间可以通过原始存储空间容量以及已占用的存储空间容量的差值确定,第二内存块的未划分存储空间即第二内存块的可用空间。
可选地,步骤206具体包括:
子步骤2063,获取每个所述第二内存块的未划分存储空间的起始地址和长度。
在本发明实施例中,确定了第二内存块存在未划分存储空间之后,可以获取未划分存储空间的起始地址和长度,起始地址和长度可以用于确定一块内存空间。
子步骤2064,将由每个所述第二内存块的未划分存储空间的起始地址和长度确定的存储空间标记为用于动态内存的申请和释放的空间,并将每个所述第二内存块的未划分存储空间与所述基础动态存储空间构成目标存储空间。
在本发明实施例中,可以将第二内存块的未划分存储空间的起始地址和长度确定的存储区域标记为用于动态内存的申请和释放的空间,即将第二内存块的未划分存储空间与第一内存块申请和释放的堆栈区挂载到一起形成目标存储空间,用于后续内存的申请和释放。
可选地,所述方法还包括:
步骤207,获取内存释放请求,所述内存释放请求包括待释放存储空间的地址和长度。
内存申请的目的就是要满足用户的申请找到一块合适的、空闲的内存区域并将这部分的内存的起始地址返回给用户。为了达到这一目的系统首先需要规划出一部分内存区域作为堆内存,即基础动态存储空间,之后每当有用户程序向操作系统申请内存时,操作系统则在堆内存中查找到一块合适内存区域。当用户申请内存后,还可以对这部分内存进行释放操作,操作系统将这部分内存回收到堆当中,表示其为可用内存区域,以便为其它用户申请内存时再次使用。申请与释放一般为成对出现,以保证内存资源在后续可以继续被申请与释放。
在本发明实施例中,对于一个线程,在执行结束之后,需要对申请的内存进行释放,内存的释放请求,例如程序中的free请求,包括待释放存储空间的地址和长度,系统用于根据内存释放请求将占用的内存资源进行释放,以保证系统运行的稳定性。进一步地,当被占用的内存资源被释放后,系统将其标记为可用存储空间,供后续程序的使用。
步骤208根据所述待释放存储空间的地址和长度释放内存资源。
在本发明实施例中,通过待释放存储空间的地址和长度可以确定待释放空间具体需要释放至哪一个内存块,若将本应该释放在第一内存块的内存释放在第二内存块,会造成内存释放错误,例如,在进行内存释放时,所释放的内存空间的地址本应该为第一内存块的地址,却错误的在第二内存块进行了释放,由于第二内存块不存在所释放的内存地址,导致内存释放错误,内存无法释放,直到程序终止。
子步骤2081,将所述待释放存储空间的地址和长度与每个所述内存块所属的地址段比较。
在本发明实施例中,由于每个内存块所属的地址段不同,程序在申请内存时,分配给程序的内存资源的地址不同,因此,判断待释放空间具体属于哪个内存块可以通过待释放存储空间的地址和长度与内存块所属的内存段比较的方式进行。
子步骤2082,将所述内存块的地址段中包含所述待释放存储空间的地址和长度的内存块,确定为所述待释放存储空间所属的目标内存块。
在本发明实施例中,若内存块的地址段中包含所述待释放存储空间的地址和长度,表明待释放空间为原先该目标内存块分配的,则可以将待释放空间的内存资源释放于该目标内存块。
子步骤2083,在所述目标内存块释放所述待释放存储空间的内存资源。
在本发明实施例中,在确定了目标内存块之后,可以将待释放存储空间的内存资源释放于目标内存块,保证了内存资源的正确释放,使得系统可以稳定运行。
可选地,所述方法还包括:
步骤209,若根据所述待释放存储空间的地址和长度确定所述待释放存储空间不属于任何内存块,则进行内存释放错误的提示。
在本发明实施例中,若通过所述待释放存储空间的地址和长度确定待释放存储空间不属于任何内存块,表明内存资源释放错误,系统进行内存释放错误的提示。
可选地,所述方法还包括:
步骤210,若所述目标存储空间中各个存储空间的可用容量均不满足所述动态内存申请请求所申请的内存的容量,则返回无可用多余内存的提示。
在本发明实施例中,若所述目标存储空间中各个存储空间的可用容量均不满足所述动态内存申请请求所申请的内存的容量,表明系统当前无可以满足动态内存申请请求需求的内存资源,系统返回无可用多余内存的提示。
可选地,所述方法还包括:
步骤211,对所述内存分配方法进行编译,生成系统镜像文件。
在本发明实施例中,将内存分配方法的接口进行编译和链接,以生成新的系统镜像文件。使得当电子设备在内存初始化后,可以根据系统镜像文件中的内存分配方法进行内存分配,使得电子设备的系统运行更加稳定。
参考图3,图3示出了一种内存申请与释放的流程图,步骤S1,系统内存信息查询与记录,获取当前内存空间的多个内存块各自的存储容量,以占用的存储容量等信息;步骤S2,系统当前可用内存信息计算,判断未设置有基础动态存储空间的第二内存块的未划分存储空间;步骤S3,可用内存初始化和挂载,将第二内存块的未划分存储空间标记为基础动态存储空间;步骤S1至步骤S3仅配置一次,可供后续多次内存申请与释放。步骤S4,根据需求执行内存的申请和释放,根据动态内存申请请求进行内存申请,根据内存释放请求,进行内存释放;步骤S5,从第一内存块上进行资源申请,即可以优先从第一内存块申请内存资源;步骤S6,判断S5中申请是否成功,即判断第一内存块的可用内存容量是否可以满足动态内存申请请求的需求,步骤S7,若S6申请不成功,则从第二内存块进行申请;步骤S8,判断S6中申请是否成功,即判断第二内存块的可用内存容量是否可以满足动态内存申请请求的需求;步骤S9,在步骤S8申请成功的情况下,将申请的待使用存储空间的地址与长度返回,结束内存申请流程;步骤S11,程序对申请的内存进行释放时,对当前要释放内存的地址检查;步骤S12,判断地址是否有效,即判断要释放的地址是否是属于第一内存块或第二内存块上的地址;步骤S13,若地址有效,则释放对应内存上的资源,内存有效即要释放的地址(待释放空间)是属于第一内存块或第一内存块的地址,若待释放空间属于第一内存块,则将内存资源释放于第一内存块,若待释放空间属于第二内存块,则将内存资源释放于第二内存块,释放完毕后,进入步骤S9,结束释放内存的流程。
综上,本申请实施例中,在获得到动态内存申请请求时,从目标存储空间中确定存储待存储数据的待使用存储空间,其中,目标存储空间为所述第一内存块的基础动态存储空间和所述第二内存块的未划分存储空间共同构成的存储空间;所述基础动态存储空间用于动态内存的申请和释放;所述未划分存储空间为所述第二内存块中未被其他进程划分使用的存储空间。本申请在不扩展原有内存的情况下,通过将原先未设置有基础动态存储空间的内存块的未划分存储空间作为可用于内存的申请与释放的目标存储空间,使得在获得动态内存申请请求时,可以利用第二内存块的未划分存储空间作为待使用存储空间,充分利用了现有的内存空间,解决了系统进程或线程需要申请内存时出现的申请内存失败问题,提高了系统内存的使用效率和系统的稳定性。
参考图4,其示出了本申请实施例提供的一种内存分配装置,应用于电子设备,所述电子设备的内存空间包括多个内存块,所述内存块包括第一内存块和第二内存块,所述第一内存块为设置有基础动态存储空间的内存块,所述第二内存块为未设置有所述基础动态存储空间的内存块,所述装置30包括:
获取模块301,用于获取动态内存申请请求,所述动态内存申请请求指示待存储数据所申请内存的容量;
内存申请模块302,用于根据所述动态内存申请请求指示的待存储数据所申请内存的容量,从所述目标存储空间中划分待使用存储空间存储所述待存储数据,所述目标存储空间为所述第一内存块的基础动态存储空间和所述第二内存块的未划分存储空间共同构成的存储空间;所述基础动态存储空间用于动态内存的申请和释放;所述未划分存储空间为所述第二内存块中未被其他进程划分使用的存储空间。
可选地,所述装置还包括:
确定模块,用于响应于配置指令,确定所述第一内存块的基础动态存储空间;
组合模块,用于获取每个所述第二内存块的未划分存储空间,将每个所述第二内存块的未划分存储空间与所述基础动态存储空间构成目标存储空间。
可选地,所述组合模块,包括:
地址获取子模块,用于获取每个所述第二内存块的未划分存储空间的起始地址和长度;
第一确定子模块,用于将由每个所述第二内存块的未划分存储空间的起始地址和长度确定的存储空间标记为用于动态内存的申请和释放的空间,并将每个所述第二内存块的未划分存储空间与所述基础动态存储空间构成目标存储空间。
可选地,所述装置还包括:
第三获取模块,用于获取内存释放请求,所述内存释放请求包括待释放存储空间的地址和长度;
释放模块,用于根据所述待释放存储空间的地址和长度释放内存资源。
可选地,所述释放模块,包括:
第一比较子模块,用于将所述待释放存储空间的地址和长度与每个所述内存块的基础动态存储空间所属的地址段比较;
第二确定子模块,用于将所述内存块的地址段中包含所述待释放存储空间的地址和长度的内存块,确定为所述待释放存储空间所属的目标内存块;
释放子模块,用于在所述目标内存块释放所述待释放存储空间的内存资源。
可选地,所述装置还包括:
第一提示模块,用于若根据所述待释放存储空间的地址和长度确定所述待释放存储空间不属于任何内存块,则进行内存释放错误的提示。
可选地,所述内存申请模块304,包括:
可用容量确定子模块,用于获取所述目标存储空间中各个存储空间的可用容量;
第二比较子模块,用于将所述目标存储空间中各个存储空间的可用容量中满足所述动态内存申请请求所申请的内存的容量的存储空间,确定为存储所述待存储数据的待使用存储空间;
返回子模块,用于将所述待使用存储空间的起始地址和长度返回至申请方。
可选地,所述第二比较子模块,包括:
第三确定子模块,用于若所述第一内存块的基础动态存储空间的可用容量满足所述动态内存申请请求所申请的内存的容量,则从所述第一内存块的基础动态存储空间中确定待使用存储空间;
第四确定子模块,用于若所述第一内存块的基础动态存储空间的可用容量不满足所述动态内存申请请求所申请的内存的容量,则从所述第二内存块的中确定待使用存储空间。
可选地,所述装置还包括:
第二提示子模块,用于若所述目标存储空间中各个存储空间的可用容量均不满足所述动态内存申请请求所申请的内存的容量,则返回无可用多余内存的提示。
可选地,所述组合模块302,包括:
容量信息获取子模块,用于获取每个所述第二内存块的原始存储空间容量以及未划分的存储空间容量;
未划分存储空间确定子模块,用于根据所述原始存储空间容量以及已划分的存储空间容量确定每个所述第二内存块的未划分存储空间。
综上,本申请实施例中,在获得到动态内存申请请求时,从目标存储空间中确定存储待存储数据的待使用存储空间,其中,目标存储空间为所述第一内存块的基础动态存储空间和所述第二内存块的未划分存储空间共同构成的存储空间;所述基础动态存储空间用于动态内存的申请和释放;所述未划分存储空间为所述第二内存块中未被其他进程划分使用的存储空间。本申请在不扩展原有内存的情况下,通过将原先未设置有基础动态存储空间的内存块的未划分存储空间作为可用于内存的申请与释放的目标存储空间,使得在获得动态内存申请请求时,可以利用第二内存块的未划分存储空间作为待使用存储空间,充分利用了现有的内存空间,解决了系统进程或线程需要申请内存时出现的申请内存失败问题,提高了系统内存的使用效率和系统的稳定性。
图5据一示例性实施例示出的一种电子设备600的框图。例如,电子设备600可以是移动电话,计算机,数字广播终端,消息收发设备,游戏控制台,平板设备,医疗设备,健身设备,个人数字助理等。
参照图5,电子设备600可以包括以下一个或多个组件:处理组件602,存储器604,电源组件606,多媒体组件608,音频组件610,输入/输出(I/O)的接口612,传感器组件614,以及通信组件616。
处理组件602通常控制电子设备600的整体操作,诸如与显示,电话呼叫,数据通信,相机操作和记录操作相关联的操作。处理组件602可以包括一个或多个处理器620来执行指令,以完成上述的方法的全部或部分步骤。此外,处理组件602可以包括一个或多个模块,便于处理组件602和其他组件之间的交互。例如,处理组件602可以包括多媒体模块,以方便多媒体组件608和处理组件602之间的交互。
存储器604用于存储各种类型的数据以支持在电子设备600的操作。这些数据的示例包括用于在电子设备600上操作的任何应用程序或方法的指令,联系人数据,电话簿数据,消息,图片,多媒体等。存储器604可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。
电源组件606为电子设备600的各种组件提供电力。电源组件606可以包括电源管理系统,一个或多个电源,及其他与为电子设备600生成、管理和分配电力相关联的组件。
多媒体组件608包括在所述电子设备600和用户之间的提供一个输出接口的屏幕。在一些实施例中,屏幕可以包括液晶显示器(LCD)和触摸面板(TP)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的分界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。在一些实施例中,多媒体组件608包括一个前置摄像头和/或后置摄像头。当电子设备600处于操作模式,如拍摄模式或多媒体模式时,前置摄像头和/或后置摄像头可以接收外部的多媒体数据。每个前置摄像头和后置摄像头可以是一个固定的光学透镜系统或具有焦距和光学变焦能力。
音频组件610用于输出和/或输入音频信号。例如,音频组件610包括一个麦克风(MIC),当电子设备600处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风用于接收外部音频信号。所接收的音频信号可以被进一步存储在存储器604或经由通信组件616发送。在一些实施例中,音频组件610还包括一个扬声器,用于输出音频信号。
I/O接口612为处理组件602和外围接口模块之间提供接口,上述外围接口模块可以是键盘,点击轮,按钮等。这些按钮可包括但不限于:主页按钮、音量按钮、启动按钮和锁定按钮。
传感器组件614包括一个或多个传感器,用于为电子设备600提供各个方面的状态评估。例如,传感器组件614可以检测到电子设备600的打开/关闭状态,组件的相对定位,例如所述组件为电子设备600的显示器和小键盘,传感器组件614还可以检测电子设备600或电子设备600一个组件的位置改变,用户与电子设备600接触的存在或不存在,电子设备600方位或加速/减速和电子设备600的温度变化。传感器组件614可以包括接近传感器,被配置用来在没有任何的物理接触时检测附近物体的存在。传感器组件614还可以包括光传感器,如CMOS或CCD图像传感器,用于在成像应用中使用。在一些实施例中,该传感器组件614还可以包括加速度传感器,陀螺仪传感器,磁传感器,压力传感器或温度传感器。
通信组件616用于便于电子设备600和其他设备之间有线或无线方式的通信。电子设备600可以接入基于通信标准的无线网络,如WiFi,运营商网络(如2G、3G、4G或5G),或它们的组合。在一个示例性实施例中,通信组件616经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,所述通信组件616还包括近场通信(NFC)模块,以促进短程通信。例如,在NFC模块可基于射频识别(RFID)技术,红外数据协会(IrDA)技术,超宽带(UWB)技术,蓝牙(BT)技术和其他技术来实现。
在示例性实施例中,电子设备600可以被一个或多个应用专用集成电路(ASIC)、数字信号处理器(DSP)、数字信号处理设备(DSPD)、可编程逻辑器件(PLD)、现场可编程门阵列(FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于实现本申请实施例提供的一种内存分配方法。
在示例性实施例中,还提供了一种包括指令的非临时性计算机可读存储介质,例如包括指令的存储器604,上述指令可由电子设备600的处理器620执行以完成上述方法。例如,所述非临时性存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。
图6据一示例性实施例示出的一种电子设备700的框图。例如,电子设备700可以被提供为一服务器。参照图6,电子设备700包括处理组件722,其进一步包括一个或多个处理器,以及由存储器732所代表的存储器资源,用于存储可由处理组件722的执行的指令,例如应用程序。存储器732中存储的应用程序可以包括一个或一个以上的每一个对应于一组指令的模块。此外,处理组件722被配置为执行指令,以执行本申请实施例提供的一种内存分配方法。
电子设备700还可以包括一个电源组件726被配置为执行电子设备700的电源管理,一个有线或无线网络接口750被配置为将电子设备700连接到网络,和一个输入输出(I/O)接口758。电子设备700可以操作基于存储在存储器732的操作系统,例如WindowsServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM或类似。
本领域技术人员在考虑说明书及实践这里公开的申请后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本申请的真正范围和精神由下面的权利要求指出。
应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求来限制。
Claims (13)
1.一种内存分配方法,应用于电子设备,所述电子设备的内存空间包括多个内存块,所述内存块包括第一内存块和第二内存块,所述第一内存块为设置有基础动态存储空间的内存块,所述第二内存块为未设置有所述基础动态存储空间的内存块,其特征在于,所述方法包括:
获取动态内存申请请求,所述动态内存申请请求指示待存储数据所申请内存的容量;
根据所述动态内存申请请求指示的待存储数据所申请内存的容量,从目标存储空间中划分待使用存储空间存储所述待存储数据,所述目标存储空间为所述第一内存块的基础动态存储空间和所述第二内存块的未划分存储空间共同构成的存储空间;所述基础动态存储空间用于动态内存的申请和释放;所述未划分存储空间为所述第二内存块中未被其他进程划分使用的存储空间。
2.根据权利要求1所述的方法,其特征在于,所述获取动态内存申请请求之前,所述方法还包括:
响应于配置指令,确定所述第一内存块的基础动态存储空间;
获取每个所述第二内存块的未划分存储空间,将每个所述第二内存块的未划分存储空间与所述基础动态存储空间构成目标存储空间。
3.根据权利要求2所述的方法,其特征在于,所述获取每个所述第二内存块的未划分存储空间,将每个所述第二内存块的未划分存储空间与所述基础动态存储空间构成目标存储空间,包括:
获取每个所述第二内存块的未划分存储空间的起始地址和长度;
将由每个所述第二内存块的未划分存储空间的起始地址和长度确定的存储空间标记为用于动态内存的申请和释放的空间,并将每个所述第二内存块的未划分存储空间与所述基础动态存储空间构成目标存储空间。
4.根据权利要求1所述的方法,其特征在于,所述根据所述动态内存申请请求指示的待存储数据所申请内存的容量,从所述目标存储空间中划分待使用存储空间存储所述待存储数据之后,所述方法还包括:
获取内存释放请求,所述内存释放请求包括待释放存储空间的地址和长度;
根据所述待释放存储空间的地址和长度释放内存资源。
5.根据权利要求4所述的方法,其特征在于,所述根据所述待释放存储空间的地址和长度释放内存资源,包括:
将所述待释放存储空间的地址和长度与每个所述内存块所属的地址段比较;
将所述内存块的地址段中包含所述待释放存储空间的地址和长度的内存块,确定为所述待释放存储空间所属的目标内存块;
在所述目标内存块释放所述待释放存储空间的内存资源。
6.根据权利要求4所述的方法,其特征在于,所述方法还包括:
若根据所述待释放存储空间的地址和长度确定所述待释放存储空间不属于任何内存块,则进行内存释放错误的提示。
7.根据权利要求1所述的方法,其特征在于,所述根据所述动态内存申请请求指示的待存储数据所申请内存的容量,从所述目标存储空间中划分待使用存储空间存储所述待存储数据,包括:
获取所述目标存储空间中各个存储空间的可用容量;
将所述目标存储空间中各个存储空间的可用容量中满足所述动态内存申请请求所申请的内存的容量的存储空间,确定为存储所述待存储数据的待使用存储空间;
将所述待使用存储空间的起始地址和长度返回至申请方。
8.根据权利要求7所述的方法,其特征在于,所述将目标存储空间中各个存储空间的可用容量中满足所述动态内存申请请求所申请的内存的容量的存储空间,确定为存储所述待存储数据的待使用存储空间,包括:
若所述第一内存块的基础动态存储空间的可用容量满足所述动态内存申请请求所申请的内存的容量,则从所述第一内存块的基础动态存储空间中确定待使用存储空间;
若所述第一内存块的基础动态存储空间的可用容量不满足所述动态内存申请请求所申请的内存的容量,则从所述第二内存块中确定待使用存储空间。
9.根据权利要求7所述的方法,其特征在于,所述方法还包括:
若所述目标存储空间中各个存储空间的可用容量均不满足所述动态内存申请请求所申请的内存的容量,则返回无可用多余内存的提示。
10.根据权利要求2所述的方法,其特征在于,所述获取每个所述第二内存块的未划分存储空间,包括:
获取每个所述第二内存块的原始存储空间容量以及已划分的存储空间容量;
根据所述原始存储空间容量以及已划分的存储空间容量确定每个所述第二内存块的未划分存储空间。
11.一种内存分配装置,应用于电子设备,所述电子设备的内存空间包括多个内存块,所述内存块包括第一内存块和第二内存块,所述第一内存块为设置有基础动态存储空间的内存块,所述第二内存块为未设置有所述基础动态存储空间的内存块,其特征在于,所述装置包括:
获取模块,用于获取动态内存申请请求,所述动态内存申请请求指示待存储数据所申请内存的容量;
内存申请模块,用于根据所述动态内存申请请求指示的待存储数据所申请内存的容量,从目标存储空间中划分待使用存储空间存储所述待存储数据,所述目标存储空间为所述第一内存块的基础动态存储空间和所述第二内存块的未划分存储空间共同构成的存储空间;所述基础动态存储空间用于动态内存的申请和释放;所述未划分存储空间为所述第二内存块中未被其他进程划分使用的存储空间。
12.一种电子设备,其特征在于,包括处理器和存储器、所述存储器存储可在所述处理器上运行的程序或指令,所述程序或指令被所述处理器执行时实现如权利要求1至10中任一项所述的方法的步骤。
13.一种可读存储介质,其特征在于,所述可读存储介质上存储有程序或指令,所述程序或指令被处理器执行时实现如权利要求1至10中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310211123.9A CN116360979A (zh) | 2023-03-06 | 2023-03-06 | 内存分配方法、装置、电子设备及可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310211123.9A CN116360979A (zh) | 2023-03-06 | 2023-03-06 | 内存分配方法、装置、电子设备及可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116360979A true CN116360979A (zh) | 2023-06-30 |
Family
ID=86910478
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310211123.9A Pending CN116360979A (zh) | 2023-03-06 | 2023-03-06 | 内存分配方法、装置、电子设备及可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116360979A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117687570A (zh) * | 2023-11-17 | 2024-03-12 | 鸿秦(北京)科技有限公司 | 一种固态硬盘中读写服务自适应的方法 |
-
2023
- 2023-03-06 CN CN202310211123.9A patent/CN116360979A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117687570A (zh) * | 2023-11-17 | 2024-03-12 | 鸿秦(北京)科技有限公司 | 一种固态硬盘中读写服务自适应的方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105955765B (zh) | 应用预加载方法及装置 | |
US11562074B2 (en) | Firmware upgrade method and device, and storage medium | |
EP2945058A1 (en) | Processing method and device for application program | |
CN104951335B (zh) | 应用程序安装包的处理方法及装置 | |
EP2991275A1 (en) | Making router management application compatible with router firmware | |
EP3509012B1 (en) | Fingerprint recognition method and device | |
CN116360979A (zh) | 内存分配方法、装置、电子设备及可读存储介质 | |
CN108829532B (zh) | 指纹检测的方法、装置和可读存储介质 | |
CN111221593A (zh) | 一种动态加载方法及装置 | |
CN107220008B (zh) | 存储空间预留方法及装置 | |
CN107463419B (zh) | 应用重启方法、装置及计算机可读存储介质 | |
CN113778687B (zh) | 内存分配信息处理方法、装置、电子设备及存储介质 | |
US11269699B2 (en) | Method and device for processing an application | |
CN110888822B (zh) | 内存处理方法、装置及存储介质 | |
CN112947970A (zh) | 升级方法、装置及存储介质 | |
CN112631695A (zh) | 一种数据校验方法、装置、电子设备及存储介质 | |
CN114860242A (zh) | 一种编译方法、编译装置及存储介质 | |
CN114115025B (zh) | 基于自动驾驶系统的故障信息的保存方法、装置和设备 | |
CN111625283A (zh) | 硬件更新方法、装置、系统和计算机可读存储介质 | |
CN108334357B (zh) | 智能终端的刷机方法及智能终端 | |
CN112506628B (zh) | 代理程序的管理方法、装置、计算机设备及存储介质 | |
CN112083981A (zh) | 一种页面视图组件的创建方法和装置 | |
CN114020504B (zh) | 一种数据处理方法、装置、电子设备及存储介质 | |
CN114531493B (zh) | 一种请求处理方法、装置、电子设备及存储介质 | |
CN111241097B (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 |