CN110888822B - 内存处理方法、装置及存储介质 - Google Patents
内存处理方法、装置及存储介质 Download PDFInfo
- Publication number
- CN110888822B CN110888822B CN201911220059.0A CN201911220059A CN110888822B CN 110888822 B CN110888822 B CN 110888822B CN 201911220059 A CN201911220059 A CN 201911220059A CN 110888822 B CN110888822 B CN 110888822B
- Authority
- CN
- China
- Prior art keywords
- memory
- service
- function
- memory space
- predetermined type
- 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
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Storage Device Security (AREA)
Abstract
本公开是关于一种内存处理方法、装置及存储介质。该方法包括:检测目标程序所包含的预定类型业务是否开始运行;当检测到预定类型业务开始运行时,在第一分配模式下按照业务粒度为预定类型业务分配第一内存空间;基于预定类型业务中的至少一个功能所需的存储容量,按照功能粒度从第一内存空间中确定分别分配给至少一个功能的每一个子空间;当检测到预定类型业务运行结束时,释放第一内存空间。这样,通过将第一内存空间作为一个整体,统一进行申请和释放,在业务运行的过程中,不需要针对各子空间频繁申请释放,能够减少内存碎片的产生,进而减少内存泄露的可能性,提高业务运行的稳定性,减少野指针的产生。
Description
技术领域
本公开涉及计算机通信领域,尤其涉及一种内存处理方法、装置及存储介质。
背景技术
在软件开发领域,开发语言的种类非常丰富,在基于开发语言进行项目开发的过程中,有些项目对软件程序的稳定性要求非常高,比如,基于航天、高铁、军工等的项目。
以基于C语言,以及C++语言开发的程序为例,在该程序所包含的业务运行的过程中,经常会出现各种内存方面的错误,而内存方面的错误对系统的稳定性影响较大。
发明内容
本公开提供一种内存处理方法、装置及存储介质。
根据本公开实施例的第一方面,提供一种内存处理方法,包括:
检测目标程序所包含的预定类型业务是否开始运行;
当检测到所述预定类型业务开始运行时,在第一分配模式下按照业务粒度为所述预定类型业务分配第一内存空间;
基于所述预定类型业务中的至少一个功能所需的存储容量,按照功能粒度从所述第一内存空间中确定分别分配给所述至少一个功能的每一个子空间;
当检测到所述预定类型业务运行结束时,释放所述第一内存空间。
可选的,所述方法还包括:
确定分配给各所述功能的子空间的存储容量之和;
当分配给各所述功能的子空间的存储容量之和大于所述第一内存空间的存储容量时,在第二分配模式下为所述预定类型业务分配第二内存空间;
其中,所述第二分配模式不同于所述第一分配模式。
可选的,所述当分配给各所述功能的子空间的存储容量之和大于所述第一内存空间的存储容量时,在第二分配模式下为所述预定类型业务分配第二内存空间,包括:
当分配给各所述功能的子空间的存储容量之和大于所述第一内存空间的存储容量时,基于所述预定类型业务中的各个功能所需的存储容量,在所述第二分配模式下按照功能粒度从所述第二内存空间中确定分别分配给所述各个功能的子空间;
所述方法还包括:
当所述各个功能结束时,释放所述第二内存空间中所述各个功能的子空间。
可选的,所述方法还包括:
在所述预定类型业务的执行代码中内存分配函数的入口处嵌入第一宏定义,并在所述执行代码的内存释放函数的入口处嵌入第二宏定义;
所述按照业务粒度为所述预定类型业务分配第一内存空间,包括:通过执行第一宏定义实现按照业务粒度分配所述第一内存空间;
所述释放所述第一内存空间,包括:
通过执行所述第二宏定义释放所述第一内存空间。
可选的,所述方法还包括:
在所述预定类型业务的执行代码的起始位置处,嵌入所述内存分配函数和所述内存释放函数的调用函数。
根据本公开实施例的第二方面,提供一种内存处理装置,包括:
业务检测模块,配置为检测目标程序所包含的预定类型业务是否开始运行;
第一内存分配模块,配置为当检测到所述预定类型业务开始运行时,在第一分配模式下按照业务粒度为所述预定类型业务分配第一内存空间;
第二内存分配模块,配置为基于所述预定类型业务中的至少一个功能所需的存储容量,按照功能粒度从所述第一内存空间中确定分别分配给所述至少一个功能的每一个子空间;
第一空间释放模块,配置为当检测到所述预定类型业务运行结束时,释放所述第一内存空间。
可选的,所述装置还包括:
容量确定模块,配置为确定分配给各所述功能的子空间的存储容量之和;
第三内存分配模块,配置为当分配给各所述功能的子空间的存储容量之和大于所述第一内存空间的存储容量时,在第二分配模式下为所述预定类型业务分配第二内存空间;
其中,所述第二分配模式不同于所述第一分配模式。
可选的,所述第三内存分配模块,还配置为:
当分配给各所述功能的子空间的存储容量之和大于所述第一内存空间的存储容量时,基于所述预定类型业务中的各个功能所需的存储容量,在所述第二分配模式下按照功能粒度从所述第二内存空间中确定分别分配给所述各个功能的子空间;
所述装置还包括:
第二空间释放模块,配置为当所述各个功能结束时,释放所述第二内存空间中所述各个功能的子空间。
可选的,所述装置还包括:
第一嵌入模块,配置为在所述预定类型业务的执行代码中内存分配函数的入口处嵌入第一宏定义,并在所述执行代码的内存释放函数的入口处嵌入第二宏定义;
所述第一内存分配模块,还配置为:通过执行第一宏定义实现按照业务粒度分配所述第一内存空间;
所述第一空间释放模块,还配置为:
通过执行所述第二宏定义释放所述第一内存空间。
可选的,所述装置还包括:
第二嵌入模块,配置为在所述预定类型业务的执行代码的起始位置处,嵌入所述内存分配函数和所述内存释放函数的调用函数。
根据本公开实施例的第三方面,提供一种内存处理装置,包括:
处理器;
配置为存储处理器可执行指令的存储器;
其中,所述处理器配置为:执行时实现上述权利要求第一方面中所述的内存处理方法中的步骤。
根据本公开实施例的第四方面,提供一种非临时性计算机可读存储介质,当所述存储介质中的指令由内存处理装置的处理器执行时,使得所述装置能够执行上述第一方面中所述的内存处理方法的步骤。
本公开的实施例提供的技术方案可以包括以下有益效果:
在本公开的实施例中,在预定类型业务开始运行的时候,统一申请第一内存空间,并在第一内存空间内进行预定类型业务的子空间的分配,在预定类型业务结束运行的时候,统一释放第一内存空间,即将第一内存空间作为一个整体,统一进行申请和释放,在业务运行的过程中,不需要针对各个子空间频繁申请释放。这样,第一方面,能够减少内存碎片的产生,进而减少内存泄露的可能性,第二方面,如果设定类型业务是逻辑比较复杂的业务,能够通过减少内存的重复释放而引起的系统崩溃,进而提高业务运行的稳定性;第三方面,由于是将第一内存空间作为一个整体,统一进行申请和释放,在业务运行的过程中,不需要修改已释放的内存,能够减少野指针的产生。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
图1是根据一示例性实施例示出的内存处理方法的流程图一。
图2是根据一示例性实施例示出的内存处理方法的流程图二。
图3是根据一示例性实施例示出的一种内存处理装置框图。
图4是根据一示例性实施例示出的一种内存处理装置的硬件结构框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
内存是计算机中重要的部件之一,它是外存与中央处理器(Central ProcessingUnit, CPU)进行沟通的桥梁。计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。内存也被称为:内存储器或主存储器,其作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。只要计算机在运行中,CPU 就会把需要运算的数据调到内存中进行运算,当运算完成后CPU再将结果传送出来,内存的运行也决定了计算机的稳定运行。
图1是根据一示例性实施例示出的内存处理方法的流程图一,如图1所示,该内存处理方法包括以下步骤:
在步骤101中,检测目标程序所包含的预定类型业务是否开始运行。
在步骤102中,当检测到预定类型业务开始运行时,在第一分配模式下按照业务粒度为预定类型业务分配第一内存空间。
在步骤103中,基于预定类型业务中的至少一个功能所需的存储容量,按照功能粒度从第一内存空间中确定分别分配给至少一个功能的每一个子空间。
在步骤104中,当检测到预定类型业务运行结束时,释放第一内存空间。
本公开实施例中,目标程序是基于设定开发语言进行编程得到的源程序编译成层的可供计算机直接执行的程序。设定开发语言包括面向对象语言,典型的面向对象语言可包括: C语言、C++语言、Java语言、C#语言等。预定类型的业务可以为包含于目标程序中,需要进行内存管理的业务。以C语言,以及C++语言为例,C语言是一门面向过程、抽象化的通用程序设计语言,广泛应用于底层开发;C++语言是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。
这里,第一分配模式是指:在预定类型业务开始运行时,为预定类型业务分配第一内存空间,在预定类型业务运行结束时,释放该第一内存空间的内存分配模式。
在检测到预定类型业务开始运行时,在第一分配模式下按照业务粒度从系统内存中确定出第一内存空间,并将该第一内存空间分配给预定类型业务。例如,可以基于预定类型业务的执行代码中的内存分配函数确定预定类型业务的业务粒度,然后从系统内存中确定出与该业务粒度相对应的第一内存空间。其中,内存分配函数用于管理内存的分配,可以包括分配(malloc)函数。以基于malloc函数进行预定类型业务的内存分配为例,在运行有该目标程序的操作系统接收到目标程序的内存申请时,可以基于malloc函数遍历预设链表,然后从预设链表中确定出空间大于为预定类型业务所申请空间的第一内存空间,并将该第一内存空间分配给预定类型业务,这里,预设链表中记录有空闲内存空间与空闲内存空间的地址之间的映射关系。
本公开实施例中,目标程序所包含的预定类型业务可以为一个或者多个。预定类型业务的业务粒度越大,为该预定类型业务所分配的第一内存空间越大。
在为预定类型业务分配第一内存空间之后,可以确定预定类型业务中的至少一个功能,然后按照各个功能的功能粒度将第一内存空间中的各个子空间分配给该至少一个功能,功能粒度用于表征处理每一个功能所需的存储容量,这里,功能粒度越大,从该第一内存空间中为该功能所分配的子空间越大。
在检测到预定类型业务运行结束时,释放第一内存空间。例如,可以基于预定类型业务的执行代码中的内存释放函数直接释放第一内存空间。其中,内存释放函数用于进行内存的释放,可以包括分配(free)函数。
本公开实施例中,在预定类型业务开始运行的时候,统一申请第一内存空间,并在第一内存空间内进行预定类型业务的子空间的分配,在预定类型业务结束运行的时候,统一释放第一内存空间,即将第一内存空间作为一个整体,统一进行申请和释放,在业务运行的过程中,不需要针对各个子空间频繁申请释放,且第一内存空间中的各个子空间只会被分配一次,不存在释放之后再重新分配的情况,能够减少内存碎片的产生,进而减少内存泄露的可能性。
在其他可选的实施例中,该方法还包括:
确定分配给各功能的子空间的存储容量之和;
当分配给各功能的子空间的存储容量之和大于第一内存空间的存储容量时,在第二分配模式下为预定类型业务分配第二内存空间;
其中,第二分配模式不同于第一分配模式。
这里,第二分配模式是指:在预定类型业务运行的过程中,为预定类型业务中的至少一个子功能分配子空间,并在各个子功能运行结束之后,释放各个功能所对应的子空间的分配模式。
这里,在将第一内存空间中的子空间分配给预定类型业务中的子功能之后,可以得到分配给每个子功能的存储容量,在进行内存分配的过程中,实时计算分配给各功能的存储容量之和,如果分配给各功能的存储容量之和大于第一内存空间的存储容量时,则为预定类型业务分配第二内存空间,其中,第二内存空间不同于第一内存空间。
本公开实施例中,在超出第一内存空间的存储容量之和时,能够及时为预定类型业务分配不同于第一内存空间的第二内存空间,能够在保证预定业务类型正常运行的基础上,减少内存泄露的可能性。
在其他可选的实施例中,当分配给各功能的子空间的存储容量之和大于第一内存空间的存储容量时,在第二分配模式下为预定类型业务分配第二内存空间,包括:
当分配给各功能的子空间的存储容量之和大于第一内存空间的存储容量时,基于预定类型业务中的各个功能所需的存储容量,在第二分配模式下按照功能粒度从第二内存空间中确定分别分配给各个功能的子空间;
该方法还包括:当各个功能结束时,释放第二内存空间中各个功能的子空间。
这里,在分配给各功能的子空间的存储容量之和超过第一内存空间的存储容量之后,可以按照预定类型业务中的各个功能的功能粒度从第二内存空间中确定分别分配给各个功能的子空间,当各个功能结束时,就释放第二内存空间中各个功能的子空间,能够在减少内存泄漏的基础上,保证预定类型业务的正常运行。
在其他可选的实施例中,该方法还包括:
在预定类型业务的执行代码中内存分配函数的入口处嵌入第一宏定义,并在执行代码的内存释放函数的入口处嵌入第二宏定义;
按照业务粒度为预定类型业务分配第一内存空间,包括:通过执行第一宏定义实现按照业务粒度分配第一内存空间;
释放第一内存空间,包括:通过执行第二宏定义释放第一内存空间。
本公开实施例中,通过将第一宏定义和第二宏定义分别嵌入在内存分配函数和内存释放函数的入口处。这样,在预定类型业务开始运行的时候,就能够立刻调用第一宏定义进行第一内存空间的分配,在预定类型结束运行的时候,立刻调用第二宏定义进行第一内存空间的释放,能够保证预定类型业务运行的整个过程的内存分配均在第一内存空间中进行,并在预定类型业务运行结束时立刻释放第一内存空间,提高了内存处理的时效性。
在其他可选的实施例中,该方法还包括:在预定类型业务的执行代码的起始位置处,嵌入内存分配函数和内存释放函数的调用函数。
本公开实施例中,可以从软件系统中确定需要进行内存管理的预定类型业务,在确定出预定类型业务之后,可以确定预定类型业务的内存管理函数,以及预定类型业务的内存释放函数。在内存管理函数入口处嵌入第一宏定义,在内存释放函数入口处中嵌入第二宏定义。在预定类型业务开始的位置,执行调用函数。基于调用函数为预定类型业务分配第一内存空间,并设定第一内存空间的存储容量。
这里,可以通过调用函数使第一宏定义,第二宏定义,修改内存管理函数,内存释放函数的行为。例如,基于第一修改函数将预定类型业务的内存分配修改为从第一内存空间中分配内存,在将第一内存空间分配给预定类型业务之后,可以记录分配给预定类型业务的内存空间的地址和范围,基于第二修改函数记录需要释放的内存空间的地址,但不释放内存。因为内存释放函数未生效,所以从第一内存空间中分配的存储容量会连续增长。确定从第一内存空间中分配的存储容量,当从第一内存空间中分配的存储容量超过第一内存空间的存储容量后,触发异常函数。这里,业务代码可注册异常结束函数,再基于异常函数处理完业务的异常处理函数后,回收剩余的内存,并在预定类型业务运行结束时,释放第一内存空间。
图2是根据一示例性实施例示出的内存处理方法的流程图二,如图2所示,该内存处理方法包括以下步骤:
在步骤201中,从软件系统中确定需要进行内存管理的预定类型业务。
这里,以预定类型业务是逻辑较复杂的业务A为例,在确定出业务A之后,可以确定业务A的内存管理函数(Amalloc),以及业务A的内存释放函数(Afree),内存管理函数包括内存分配函数。
在步骤202中,在内存管理函数入口处嵌入第一宏定义(memProctectMalloc),在内存释放函数入口处中嵌入第二宏定义(memProtectFree)。
在步骤203中,在业务A开始的位置startA,嵌入调用函数(memProtectStart(Amalloc, Afree,memSize))。
在步骤204中,基于调用函数为业务A分配一块内存M(第一内存空间),并设定内存M的存储容量为memSize。
这里,可以基于调用函数t使第一宏定义,第二宏定义生效,修改内存管理函数,内存释放函数的行为。例如,基于第一修改函数(memProctectMallocHook)将业务A的内存分配修改为从内存M中分配内存,在将内存M分配给业务A之后,可以记录分配给业务A的内存空间的地址和范围,基于第二修改函数(memProtectFreeHook)记录需要释放的内存空间的地址,但不释放内存。因为内存释放函数未生效,所以从内存M中分配的存储容量usedM会连续增长。
在步骤205中,确定从内存M中分配的内存usedM,当usedM超过memSize后,触发异常函数(memProtectException)。
这里,业务代码可注册异常结束函数,memProtectException处理完业务的异常处理函数后,回收剩余的内存。
在步骤206中,在业务A运行结束时,释放内存M。
本公开实施例中,在预定类型业务运行的过程中,不会出现重复释放内存的情况,因为每块内存只会被分配一次,能够避免由于错误操作将已释放后的内存再分配给其他功能,避免修改已释放内存所产生的野指针问题,在预定类型业务结束后,统一释放内存,不需要针对各子空间频繁申请释放,且第一内存空间中的各个子空间只会被分配一次,不存在释放之后再重新分配的情况,能够减少内存碎片的产生,进而减少内存泄露的可能性。
图3是根据一示例性实施例示出的一种内存处理装置框图。如图3所示,该内存处理装置300主要包括:
业务检测模块301,配置为检测目标程序所包含的预定类型业务是否开始运行;
第一内存分配模块302,配置为当检测到预定类型业务开始运行时,在第一分配模式下按照业务粒度为预定类型业务分配第一内存空间;
第二内存分配模块303,配置为基于预定类型业务中的至少一个功能所需的存储容量,按照功能粒度从第一内存空间中确定分别分配给至少一个功能的每一个子空间;
第一空间释放模块304,配置为当检测到预定类型业务运行结束时,释放第一内存空间。
在其他可选的实施例中,装置300还包括:
容量确定模块,配置为确定分配给各功能的子空间的存储容量之和;
第三内存分配模块,配置为当分配给各功能的子空间的存储容量之和大于第一内存空间的存储容量时,在第二分配模式下为预定类型业务分配第二内存空间;
其中,第二分配模式不同于第一分配模式。
在其他可选的实施例中,第三内存分配模块,还配置为:
当分配给各功能的子空间的存储容量之和大于第一内存空间的存储容量时,基于预定类型业务中的各个功能所需的存储容量,在第二分配模式下按照功能粒度从第二内存空间中确定分别分配给各个功能的子空间;
装置300还包括:
第二空间释放模块,配置为当各个功能结束时,释放第二内存空间中各个功能的子空间。
在其他可选的实施例中,装置300还包括:
第一嵌入模块,配置为在预定类型业务的执行代码中内存分配函数的入口处嵌入第一宏定义,并在执行代码的内存释放函数的入口处嵌入第二宏定义;
第一内存分配模块303,还配置为:通过执行第一宏定义实现按照业务粒度分配第一内存空间;
第一空间释放模块304,还配置为:
通过执行第二宏定义释放第一内存空间。
在其他可选的实施例中,装置300还包括:
第二嵌入模块,配置为在预定类型业务的执行代码的起始位置处,嵌入内存分配函数和内存释放函数的调用函数。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
图4是根据一示例性实施例示出的一种内存处理装置800的硬件结构框图。例如,装置800可以是移动电话,移动电脑等。
参照图4,装置800可以包括以下一个或多个组件:处理组件802,存储器804,电源组件806,多媒体组件808,音频组件810,输入/输出(I/O)的接口812,传感器组件 814,以及通信组件816。
处理组件802通常控制装置800的整体操作,诸如与显示,电话呼叫,数据通信,相机操作和记录操作相关联的操作。处理组件802可以包括一个或多个处理器820来执行指令,以完成上述的方法的全部或部分步骤。此外,处理组件802可以包括一个或多个模块,便于处理组件802和其他组件之间的交互。例如,处理组件802可以包括多媒体模块,以方便多媒体组件808和处理组件802之间的交互。
存储器804被配置为存储各种类型的数据以支持在装置800的操作。这些数据的示例包括用于在装置800上操作的任何应用程序或方法的指令,联系人数据,电话簿数据,消息,图片,视频等。存储器804可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。
电力组件806为装置800的各种组件提供电力。电源组件806可以包括电源管理系统,一个或多个电源,及其他与为装置800生成、管理和分配电力相关联的组件。
多媒体组件808包括在所述装置800和用户之间的提供一个输出接口的屏幕。在一些实施例中,屏幕可以包括液晶显示器(LCD)和触摸面板(TP)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。在一些实施例中,多媒体组件808包括一个前置摄像头和/或后置摄像头。当装置800处于操作模式,如拍摄模式或视频模式时,前置摄像头和/或后置摄像头可以接收外部的多媒体数据。每个前置摄像头和后置摄像头可以是一个固定的光学透镜系统或具有焦距和光学变焦能力。
音频组件810被配置为输出和/或输入音频信号。例如,音频组件810包括一个麦克风(MIC),当装置800处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器804或经由通信组件816发送。在一些实施例中,音频组件810还包括一个扬声器,用于输出音频信号。
I/O接口812为处理组件802和外围接口模块之间提供接口,上述外围接口模块可以是键盘,点击轮,按钮等。这些按钮可包括但不限于:主页按钮、音量按钮、启动按钮和锁定按钮。
传感器组件814包括一个或多个传感器,用于为装置800提供各个方面的状态评估。例如,传感器组件814可以检测到装置800的打开/关闭状态,组件的相对定位,例如所述组件为装置800的显示器和小键盘,传感器组件814还可以检测装置800或装置800 一个组件的位置改变,用户与装置800接触的存在或不存在,装置800方位或加速/减速和装置800的温度变化。传感器组件814可以包括接近传感器,被配置用来在没有任何的物理接触时检测附近物体的存在。传感器组件814还可以包括光传感器,如CMOS或CCD 图像传感器,用于在成像应用中使用。在一些实施例中,该传感器组件814还可以包括加速度传感器,陀螺仪传感器,磁传感器,压力传感器或温度传感器。
通信组件816被配置为便于装置800和其他设备之间有线或无线方式的通信。装置800可以接入基于通信标准的无线网络,如Wi-Fi,2G或3G,或它们的组合。在一个示例性实施例中,通信组件816经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,所述通信组件816还包括近场通信(NFC)模块,以促进短程通信。例如,在NFC模块可基于射频识别(RFID)技术,红外数据协会(IrDA) 技术,超宽带(UWB)技术,蓝牙(BT)技术和其他技术来实现。
在示例性实施例中,装置800可以被一个或多个应用专用集成电路(ASIC)、数字信号处理器(DSP)、数字信号处理设备(DSPD)、可编程逻辑器件(PLD)、现场可编程门阵列(FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述方法。
在示例性实施例中,还提供了一种包括指令的非临时性计算机可读存储介质,例如包括指令的存储器804,上述指令可由装置800的处理器820执行以完成上述方法。例如,所述非临时性计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。
一种非临时性计算机可读存储介质,当所述存储介质中的指令由内存处理装置的处理器执行时,使得内存处理装置能够执行一种内存处理方法,该方法包括:
检测目标程序所包含的预定类型业务是否开始运行;
当检测到所述预定类型业务开始运行时,在第一分配模式下按照业务粒度为所述预定类型业务分配第一内存空间;
基于所述预定类型业务中的至少一个功能所需的存储容量,按照功能粒度从所述第一内存空间中确定分别分配给所述至少一个功能的每一个子空间;
当检测到所述预定类型业务运行结束时,释放所述第一内存空间。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本公开旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。
Claims (10)
1.一种内存处理方法,其特征在于,包括:
检测目标程序所包含的预定类型业务是否开始运行;
当检测到所述预定类型业务开始运行时,在第一分配模式下按照业务粒度为所述预定类型业务分配第一内存空间;
基于所述预定类型业务中的至少一个功能所需的存储容量,按照功能粒度从所述第一内存空间中确定分别分配给所述至少一个功能的每一个子空间;
当检测到所述预定类型业务运行结束时,释放所述第一内存空间;
确定分配给各所述功能的子空间的存储容量之和;
当分配给各所述功能的子空间的存储容量之和大于所述第一内存空间的存储容量时,在第二分配模式下为所述预定类型业务分配第二内存空间;
其中,所述第二分配模式不同于所述第一分配模式。
2.根据权利要求1所述的方法,其特征在于,所述当分配给各所述功能的子空间的存储容量之和大于所述第一内存空间的存储容量时,在第二分配模式下为所述预定类型业务分配第二内存空间,包括:
当分配给各所述功能的子空间的存储容量之和大于所述第一内存空间的存储容量时,基于所述预定类型业务中的各个功能所需的存储容量,在所述第二分配模式下按照功能粒度从所述第二内存空间中确定分别分配给所述各个功能的子空间;
所述方法还包括:
当所述各个功能结束时,释放所述第二内存空间中所述各个功能的子空间。
3.根据权利要求1至2任一项所述的方法,其特征在于,所述方法还包括:
在所述预定类型业务的执行代码中内存分配函数的入口处嵌入第一宏定义,并在所述执行代码的内存释放函数的入口处嵌入第二宏定义;
所述按照业务粒度为所述预定类型业务分配第一内存空间,包括:通过执行第一宏定义实现按照业务粒度分配所述第一内存空间;
所述释放所述第一内存空间,包括:
通过执行所述第二宏定义释放所述第一内存空间。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
在所述预定类型业务的执行代码的起始位置处,嵌入所述内存分配函数和所述内存释放函数的调用函数。
5.一种内存处理装置,其特征在于,包括:
业务检测模块,配置为检测目标程序所包含的预定类型业务是否开始运行;
第一内存分配模块,配置为当检测到所述预定类型业务开始运行时,在第一分配模式下按照业务粒度为所述预定类型业务分配第一内存空间;
第二内存分配模块,配置为基于所述预定类型业务中的至少一个功能所需的存储容量,按照功能粒度从所述第一内存空间中确定分别分配给所述至少一个功能的每一个子空间;
第一空间释放模块,配置为当检测到所述预定类型业务运行结束时,释放所述第一内存空间;
容量确定模块,配置为确定分配给各所述功能的子空间的存储容量之和;
第三内存分配模块,配置为当分配给各所述功能的子空间的存储容量之和大于所述第一内存空间的存储容量时,在第二分配模式下为所述预定类型业务分配第二内存空间;
其中,所述第二分配模式不同于所述第一分配模式。
6.根据权利要求5所述的装置,其特征在于,所述第三内存分配模块,还配置为:
当分配给各所述功能的子空间的存储容量之和大于所述第一内存空间的存储容量时,基于所述预定类型业务中的各个功能所需的存储容量,在所述第二分配模式下按照功能粒度从所述第二内存空间中确定分别分配给所述各个功能的子空间;
所述装置还包括:
第二空间释放模块,配置为当所述各个功能结束时,释放所述第二内存空间中所述各个功能的子空间。
7.根据权利要求5至6任一项所述的装置,其特征在于,所述装置还包括:
第一嵌入模块,配置为在所述预定类型业务的执行代码中内存分配函数的入口处嵌入第一宏定义,并在所述执行代码的内存释放函数的入口处嵌入第二宏定义;
所述第一内存分配模块,还配置为:通过执行第一宏定义实现按照业务粒度分配所述第一内存空间;
所述第一空间释放模块,还配置为:
通过执行所述第二宏定义释放所述第一内存空间。
8.根据权利要求7所述的装置,其特征在于,所述装置还包括:
第二嵌入模块,配置为在所述预定类型业务的执行代码的起始位置处,嵌入所述内存分配函数和所述内存释放函数的调用函数。
9.一种内存处理装置,其特征在于,包括:
处理器;
配置为存储处理器可执行指令的存储器;
其中,所述处理器配置为:执行时实现上述权利要求1至4中任一种内存处理方法中的步骤。
10.一种非临时性计算机可读存储介质,当所述存储介质中的指令由内存处理装置的处理器执行时,使得所述装置能够执行上述权利要求1至4中任一种内存处理方法中的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911220059.0A CN110888822B (zh) | 2019-12-03 | 2019-12-03 | 内存处理方法、装置及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911220059.0A CN110888822B (zh) | 2019-12-03 | 2019-12-03 | 内存处理方法、装置及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110888822A CN110888822A (zh) | 2020-03-17 |
CN110888822B true CN110888822B (zh) | 2022-09-16 |
Family
ID=69750159
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911220059.0A Active CN110888822B (zh) | 2019-12-03 | 2019-12-03 | 内存处理方法、装置及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110888822B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114327868B (zh) * | 2021-12-08 | 2023-12-26 | 中汽创智科技有限公司 | 一种内存动态调控方法、装置、设备及介质 |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6507903B1 (en) * | 2000-06-20 | 2003-01-14 | International Business Machines Corporation | High performance non-blocking parallel storage manager for parallel software executing on coordinates |
WO2003017107A1 (en) * | 2001-08-15 | 2003-02-27 | Koninklijke Philips Electronics N.V. | Memory pools with moving memory blocks |
US7478210B2 (en) * | 2006-06-09 | 2009-01-13 | Intel Corporation | Memory reclamation with optimistic concurrency |
CN101221536B (zh) * | 2008-01-25 | 2010-06-16 | 中兴通讯股份有限公司 | 嵌入式系统的内存管理方法及装置 |
CN101499034A (zh) * | 2009-03-05 | 2009-08-05 | 北京中星微电子有限公司 | 内存管理方法 |
CN101593152B (zh) * | 2009-06-25 | 2011-07-27 | 青岛海信移动通信技术股份有限公司 | 一种移动终端内存泄漏检测方法及装置 |
CN103019949B (zh) * | 2012-12-27 | 2015-08-19 | 华为技术有限公司 | 一种写合并属性内存空间的分配方法及装置 |
CN103970668A (zh) * | 2013-02-01 | 2014-08-06 | 腾讯科技(深圳)有限公司 | 内存清理方法、装置及终端 |
CN105302733B (zh) * | 2014-07-03 | 2019-05-31 | 深圳市腾讯计算机系统有限公司 | 一种内存分配的方法及装置 |
CN106445835B (zh) * | 2015-08-10 | 2020-11-17 | 北京忆恒创源科技有限公司 | 内存分配方法与装置 |
CN110058904B (zh) * | 2019-04-24 | 2023-04-04 | 广东三维家信息科技有限公司 | 数据转移方法、装置及服务器 |
-
2019
- 2019-12-03 CN CN201911220059.0A patent/CN110888822B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN110888822A (zh) | 2020-03-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105955765B (zh) | 应用预加载方法及装置 | |
CN106020943B (zh) | 应用程序双开启方法及装置 | |
US20180365004A1 (en) | Method and device for calling software development kit | |
CN105573472B (zh) | 一种关闭应用程序的方法和装置 | |
CN107370772B (zh) | 账号登录方法、装置及计算机可读存储介质 | |
CN107291626B (zh) | 数据存储方法和装置 | |
CN111240694A (zh) | 应用检测方法、应用检测装置及存储介质 | |
CN110166564B (zh) | 信息通信方法、终端及存储介质 | |
CN110888822B (zh) | 内存处理方法、装置及存储介质 | |
CN111580980B (zh) | 内存管理方法和装置 | |
CN106502740B (zh) | 应用安装方法和装置 | |
CN112256563A (zh) | 安卓应用稳定性测试方法、装置、电子设备及存储介质 | |
CN107220008B (zh) | 存储空间预留方法及装置 | |
CN116360979A (zh) | 内存分配方法、装置、电子设备及可读存储介质 | |
CN106354595B (zh) | 移动终端、硬件组件状态检测方法及装置 | |
US20210390026A1 (en) | Method and device for processing information, and storage medium | |
CN109918132B (zh) | 一种指令安装方法、装置、电子设备及存储介质 | |
CN110928595B (zh) | 一种权限操作方法及装置 | |
CN114860242A (zh) | 一种编译方法、编译装置及存储介质 | |
CN107463414B (zh) | 应用安装方法及装置 | |
CN112817844A (zh) | 后台进程驻留测试方法、装置、设备及存储介质 | |
CN106709285B (zh) | 应用锁界面的显示方法及装置 | |
CN112306883A (zh) | 软件测试方法、装置及介质 | |
CN107391128B (zh) | 监控虚拟文件对象模型vdom的方法和装置 | |
CN111813426A (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 |