CN109343953B - 内存管理方法、装置及电子设备 - Google Patents
内存管理方法、装置及电子设备 Download PDFInfo
- Publication number
- CN109343953B CN109343953B CN201810994016.7A CN201810994016A CN109343953B CN 109343953 B CN109343953 B CN 109343953B CN 201810994016 A CN201810994016 A CN 201810994016A CN 109343953 B CN109343953 B CN 109343953B
- Authority
- CN
- China
- Prior art keywords
- memory
- memory space
- address
- space
- operation object
- 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)
- Stored Programmes (AREA)
- Memory System (AREA)
Abstract
本发明公开了一种内存管理方法、装置及电子设备,其中,方法包括:获取应用程序的内存申请的请求;基于请求分配第一内存空间,并申请第二内存空间;其中,第二内存空间用于保存第一内存空间的大小、第一内存空间的引用次数中的至少之一;将第一内存空间与第二内存空间进行关联,并记录到预先设置的关联容器中;获取基于第一内存空间的内存操作指令;利用关联容器处理内存操作指令。通过额外申请的第二内存空间保存第一内存空间的性能参数,在后续利用第一内存空间进行操作时,就可以利用所保存的性能参数对判断引用第一内存空间的指针是否为空、是否越界等等,从而能够客观解决内存问题,避免人为因素的影响,提高了内存问题处理的效率。
Description
技术领域
本发明涉及内存管理技术领域,具体涉及一种内存管理方法、装置及电子设备。
背景技术
在软件程序开发过程中,最容易出现、最难发现以及最不好解决的问题就是内存问题,其主要涉及两个方面:内存越界以及空指针。
其中,对于内存越界,就是程序向系统申请了一块内存,而在使用这块内存的时候,超出了申请的范围。例如,申请的是100字节的空间,但是由于某种原因写入了120字节,这就是内存访问越界。内存访问越界的后果是:你的写入破坏了本不属于你的空间。而内存越界通常会导致如下后果:(1)破坏了堆中的内存分配信息数据,特别是动态分配的内存块的内存信息数据;(2)破坏了程序自己的其他对象的内存空间,这种破坏会影响程序执行的不正确性;(3)破坏了空闲内存块。
对于空指针,就是指针的内容为空。既然一个指针指向的是空对象,就不能使用这个对象,否则就会产生空指针异常。内存越界轻则导致程序会出现未定义的现象,重则直接导致程序崩溃;而访问空指针则直接导致系统崩溃。
针对上述两种内存问题,现有技术中通常是依赖程序开发人员的编程经验,或者在程序报错时,找到哪里有内存访问越界,而比较麻烦的问题在于,出现错误的地方往往不是真正内存越界的地方,就必须通过代码走查、单步跟踪并观察变量以及在调试环境的帮助下对变量进行写入跟踪。然而,该方法的处理效率较低,影响程序的开发周期。
发明内容
有鉴于此,本发明实施例提供了一种内存管理方法、装置及电子设备,以解决对于内存问题处理效率低的问题。
根据第一方面,本发明实施例提供了一种内存管理方法,包括:
获取应用程序的内存申请的请求;
基于所述请求分配第一内存空间,并申请第二内存空间;其中,所述第二内存空间用于保存所述第一内存空间的大小、所述第一内存空间的引用次数中的至少之一;
将所述第一内存空间与所述第二内存空间进行关联,并记录到预先设置的关联容器中;
获取基于所述第一内存空间的内存操作指令;
利用所述关联容器处理所述内存操作指令。
本发明实施例提供的内存管理方法,在申请第一内存空间的同时额外申请第二内存空间,该第二内存空间用于保存第一内存空间的性能参数(例如,第一内存空间的大小、引用第一内存空间的次数等等),在后续利用第一内存空间进行操作时,就可以利用第二内存空间中保存的性能参数对判断引用第一内存空间的指针是否为空、基于第一内存管空间的操作是否越界等等,从而能够客观解决内存问题,避免人为因素的影响,提高了内存问题处理的效率。
结合第一方面,在第一方面第一实施方式中,所述利用所述关联容器处理所述内存操作指令,包括:
提取所述内存操作指令中的操作对象;
基于所述操作对象的地址,查询所述关联容器中是否存在与所述操作对象的地址对应的元素;
当所述关联容器中不存在与所述操作对象的地址对应的元素时,确定所述操作对象为空指针,停止后续处理步骤。
本发明实施例提供的内存管理方法,利用关联容器实现第一内存空间与第二内存空间的关联,若内存操作指令中的操作对象在关联容器中并不存在,则表示该操作对象为空指针;即通过关联容器即可判断出内存操作指令中的操作对象是否为空指针,提高了内存问题处理的效率。
结合第一方面第一实施方式,在第一方面第二实施方式中,还包括:
当所述关联容器中存在与所述操作对象的地址对应的元素时,确定与所述操作对象对应的所述第一内存空间的大小;
基于所述操作对象的地址以及所述操作对象的长度,计算所述操作对象所需的内存空间的大小;
比较确定出的所述第一内存空间与计算出的所述内存空间的大小关系;
当计算出的所述内存空间大于所述确定出的所述第一内存空间时,确定内存越界,停止后续处理步骤。
本发明实施例提供的内存管理方法,利用关联容器中第一内存的大小,确定内存操作指令中的操作对象是否越界,若该操作对象越界时,停止后续处理步骤,避免出现由于内存越界所导致的程序崩溃等内存问题。
结合第一方面第一实施方式,在第一方面第三实施方式中,所述利用所述关联容器处理所述内存操作指令,包括:
当所述关联容器中存在与所述操作对象的地址对应的元素时,基于所述内存操作指令,修改所述第一内存空间的引用次数;
确定修改后的所述第一内存空间的引用次数是否为零;
当修改后的所述第一内存空间的引用次数为零时,释放所述第一内存空间。
本发明实施例提供的内存管理方法,通过实时修改第二内存空间中的引用计数的数值,用以表示当前引用第一内存空间的次数,在第一内存空间的引用次数为零时,表示第一内存空间对内存操作指令无影响,释放该第一内存空间,以提高内存利用效率。
结合第一方面第三实施方式,在第一方面第四实施方式中,所述基于所述内存操作指令,修改所述第一内存空间的引用次数,包括:
当所述内存操作指令用于创建一个与所述第一内存空间关联的操作对象时,所述第一内存空间的引用次数加1;
当所述内存操作指令用于释放一个与所述第一内存空间关联的操作对象时,所述第一内存空间的引用次数减1。
结合第一方面或第一方面任一实施方式,在第一方面第五实施方式中,所述利用关联容器,绑定所述第一内存空间与所述第二内存空间,包括:
分别记录所述第一内存空间的地址以及所述第二内存空间的地址,以得到两个内存空间的地址;
将两个所述内存空间的地址插入所述关联容器中。
本发明实施例提供的内存管理方法,在关联容器中绑定第一内存空间以及第二内存空间的地址,通过地址实现内存空间的查找,能够提高内存操作指令的处理效率。
根据第二方面,本发明实施例还提供了一种内存管理装置,包括:
第一获取模块,用于获取应用程序的内存申请的请求;
分配模块,用于基于所述请求分配第一内存空间,并申请第二内存空间;其中,所述第二内存空间用于保存所述第一内存空间的大小、所述第一内存空间的引用次数中的至少之一;
绑定模块,用于将所述第一内存空间与所述第二内存空间进行关联,并记录到预先设置的关联容器中;
第二获取模块,用于获取基于所述第一内存空间的内存操作指令;
处理模块,用于利用所述关联容器处理所述内存操作指令。
本发明实施例提供的内存管理装置,在申请第一内存空间的同时额外申请第二内存空间,该第二内存空间用于保存第一内存空间的性能参数(例如,第一内存空间的大小、引用第一内存空间的次数等等),在后续利用第一内存空间进行操作时,就可以利用第二内存空间中保存的性能参数对判断引用第一内存空间的指针是否为空、基于第一内存空间的操作是否越界等等,从而能够客观解决内存问题,避免人为因素的影响,提高了内存问题处理的效率。
结合第二方面,在第二方面第一实施方式中,所述处理模块,包括:
提取单元,用于提取所述内存操作指令中的操作对象;
查询单元,用于基于所述操作对象的地址,查询所述关联容器中是否存在与所述操作对象的地址对应的元素;
空指针停止单元,用于当所述关联容器中不存在与所述操作对象的地址对应的元素,确定所述操作对象为空指针,停止后续处理步骤。
根据第三方面,本发明实施例还提供了一种电子设备,包括:存储器和处理器,所述存储器和所述处理器之间互相通信连接,所述存储器中存储有计算机指令,所述处理器通过执行所述计算机指令,从而执行本发明第一方面,或第一方面任一实施方式中所述的内存管理方法。
根据第四方面,本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使所述计算机执行本发明第一方面,或第一方面任一实施方式中所述的内存管理方法。
附图说明
通过参考附图会更加清楚的理解本发明的特征和优点,附图是示意性的而不应理解为对本发明进行任何限制,在附图中:
图1示出了本发明实施例中内存管理方法的流程图;
图2示出了本发明实施例中内存管理方法的流程图;
图3示出了本发明实施例中第一内存空间的结构图;
图4示出了本发明实施例中第二内存空间的结构图;
图5示出了本发明实施例中容器的结构图;
图6示出了本发明实施例中内存管理方法的流程图;
图7示出了本发明实施例中内存管理方法的流程图;
图8示出了本发明实施例中内存管理装置的结构图;
图9示出了本发明实施例中内存管理装置的结构图;
图10示出了本发明实施例中电子设备的结构图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
根据本发明实施例,提供了一种内存管理方法的实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
在本实施例中提供了一种内存管理方法,可用于电子设备中,图1是根据本发明实施例的内存管理方法的流程图,如图1所示,该流程包括如下步骤:
S11,获取应用程序的内存申请的请求。
应用程序调用接口向系统申请内存,即,电子设备能够获取到应用程序的内存申请请求。例如,在软件开发过程中,需要定义一个新的指针对象,或定义一个新的类等等,都需要向系统申请内存空间,以便与后续针对所定义的指针,或类进行操作。
S12,基于请求分配第一内存空间,并申请第二内存空间。
其中,第二内存空间用于保存第一内存空间的大小、第一内存空间的引用次数中的至少之一。
系统在获取到内存申请请求时,基于该请求立即申请一块指定长度的第一内存空间;此外,还会申请额外的一块内存,即第二内存空间。该第二内存空间用于保存第一内存空间的大小和/或引用次数。
其中,第一内存空间的大小用于后续在处理内存操作指令时,判断操作对象是否会产生内存越界问题;引用次数用于后续在处理内存操作指令时,判断第一内存空间是否有关联的对象,用于及时释放内存空间。
S13,将第一内存空间与第二内存空间进行关联,并记录到预先设置的关联容器中。
利用一个预选设置的关联容器,保存关联后的第一内存空间与第二内存空间。具体实现第一内存空间与第二内存空间的关联,可以将第一内存空间以及第二内存空间的地址进行关联,插入到关联容器中,也可以将第一内存空间以及第二内存空间的名称进行关联,插入到关联容器中等等,只需保证利用关联容器,能够确定第一内存空间以及第二内存空间即可。
S14,获取基于所述第一内存空间的内存操作指令。
在应用程序向系统申请第一内存空间之后,后续的内存操作指令是在第一内存空间的基础上进行相关的操作的。例如,内存操作指令可以是拷贝操作、赋值操作、运算或内存拷贝操作等等。
S15,利用关联容器处理内存操作指令。
系统获取到内存操作指令之后,利用关联容器处理内存操作指令。由于关联容器中记录有第一内存空间以及第二内存空间,且第二内存空间用于间接反映第一内存空间的性能,因此利用关联容器处理内存操作指令,可以在处理该内存操作指令时能够兼顾第一内存空间的性能,避免出现内存问题。
本实施例提供的内存管理方法,在申请第一内存空间的同时额外申请第二内存空间,该第二内存空间用于保存第一内存空间的性能参数(例如,第一内存空间的大小、引用第一内存空间的次数等等),在后续利用第一内存空间进行操作时,就可以利用第二内存空间中保存的性能参数对判断引用第一内存空间的指针是否为空、基于第一内存空间的操作是否越界等等,从而能够客观解决内存问题,避免人为因素的影响,提高了内存问题处理的效率。
本发明实施例还提供了一种内存管理方法,如图2所示,包括以下步骤:
S21,获取应用程序的内存申请的请求。详细请参见图1所示实施例的S11,在此不再赘述。
S22,基于请求分配第一内存空间,并申请第二内存空间。
其中,第二内存空间用于保存第一内存空间的大小、第一内存空间的引用次数中的至少之一。
例如,图3示出了第一内存空间的指针类图,T为基本类型,在图3所示的指针类图中利用模板,实现了支持多种基本数据类型的指针操作。其中,m_pOriginAddress为对应内存空间的起始地址;m_pRealAddess为在对应内存空间中,该指针实际指向的位置。
图4示出了第二内存空间的记录结构图,进一步地,图4为记录已申请的第一内存空间的管理结构图,其中,m_dwBlockSize记录了第一内存空间的大小,用于检测内存越界的判断条件;m_dwRefCount记录了第一内存空间被引用的个数,用于释放内存的判断逻辑。
S23,将第一内存空间与第二内存空间进行关联,并记录到预先设置的关联容器中。
其中,将第一内存空间与第二内存空间的地址进行绑定,以实现内存空间之间的关联,再将两个内存空间对应的地址记录到预先设置的关联容器中。
具体地,该步骤包括:
S231,分别记录第一内存空间的地址以及第二内存空间的地址,以得到两个内存空间的地址。
在系统申请一块指定长度的第一内存空间时,记录下第一内存空间的起始地址以及当前实际的内存地址,刚申请的第一内存空间的起始地址跟实际的内存地址是一致的。同时,在额外申请第二内存空间时,记录额外申请的第二内存空间的地址。至此,得到了两个内存空间的地址。
S232,将两个内存空间的地址插入关联容器中。
每次当系统获取到应用程序的内存申请的请求时,会在申请应用程序所需求的第一内存空间时,会额外再申请一块第二内存空间,将两个内存空间的地址绑定后,插入到关联容器中。进而,对应于应用程序所需求的第一内存空间,在关联容器中是以第一内存空间与第二内存空间的组合进行存储的。
图5示出了关联容器的结构图,进一步地,图5为管理内存的结构图。首先,定义了一个全局的map变量,每当应用程序申请一次内存时,则把相关的数据组织到一起,接着插入到这个map容器中。其中,CSafePointer.m_pOriginAddress用于表示第一内存空间的地址,TheapBlock用于表示第二内存空间的地址。
S24,获取基于第一内存空间的内存操作指令。详细请参见图1所示实施例的S14,在此不再赘述。
S25,利用关联容器处理内存操作指令。
在系统获取到内存操作指令时,首先需要判断内存操作指令中的操作对象是否为空指针,若为空指针,则需要后续停止内存操作指令的处理。具体地,包括以下步骤:
S251,提取内存操作指令中的操作对象。
例如,当内存操作指令为拷贝时(将对象A拷贝给对象B),则需要提取出对象A;当内存操作指令为赋值时(将对象A赋值给对象B),则需要提取出对象A以及对象B等等。
S252,基于操作对象的地址,查询关联容器中是否存在与操作对象的地址对应的元素。
在应用程序形成内存操作指令时,其首先需要定义操作对象的具体地址,在指定的地址对应的内存空间中进行具体内存操作指令的处理。
由于在关联容器中记录有已申请的内存空间对应的地址,因此,通过操作对象的地址即可判断出该操作对象是否为空指针。具体地,可以利用操作对象的地址,遍历关联容器中的所有第一内存空间的地址,查询操作对象的地址与关联容器中的第一内存空间的地址是否匹配。
S253,当关联容器中不存在与操作对象的地址对应的元素时,确定操作对象为空指针,停止后续处理步骤。
当操作对象的地址在关联容器中不存在对应的元素时,则能够确定该操作对象为空指针,应当停止后续对内存操作指令的处理步骤。
与图1所示实施例相比,本实施例利用关联容器实现第一内存空间与第二内存空间的关联,若内存操作指令中的操作对象在关联容器中并不存在,则表示该操作对象为空指针;即通过关联容器即可判断出内存操作指令中的操作对象是否为空指针,提高了内存问题处理的效率。
在本实施例的一些可选实施方式中,如图6所述,S252之后还包括:
S254,当关联容器中存在与操作对象的地址对应的元素时,确定与操作对象对应的第一内存空间的大小。
当系统在关联容器中查询到与操作对象的地址对应的元素时,表示该操作对象为非空指针,可以继续进行后续的处理步骤。
具体地,利用操作对象的地址在关联容器中匹配出对应的第一内存空间时,由于第一内存空间与第二内存空间是绑定的,因此,从匹配出的第一内存空间对应的第二内存空间中能够提取出所匹配到的第一内存空间的大小。
通过第一内存空间的地址以及第一内存空间的大小,可确定出第一内存空间的末端地址。其中,第一内存空间的末端地址为第一内存空间的地址与第一内存空间的大小之和。例如,第一内存空间的地址为2000H,第一内存空间的大小为02FFH,那么第一内存空间的末端地址为两者之和,即为22FFH。
S255,基于操作对象的地址以及操作对象的长度,计算操作对象所需的内存空间的大小。
利用操作对象的地址以及操作对象的长度,可以确定出该操作对象所需的内存范围。其中,该操作对象对应的末端地址为操作对象的地址与操作对象的长度之和。进而,操作对象所需的内存空间的范围为:操作对象的地址至操作对象的末端地址之间。
S256,比较确定出的第一内存空间与计算出的内存空间的大小关系。
即,确定第一内存空间的实际大小,与操作对象所需求的内存空间大小关系。
S257,当计算出的内存空间大于确定出的第一内存空间时,确定内存越界,停止后续处理步骤。
具体地,若操作对象所需求的内存空间超出第一内存空间的内存范围时,则表示此时出现了内存越界的问题,应当停止后续的处理步骤。
本实施例利用关联容器中第一内存的大小,确定内存操作指令中的操作对象是否越界,若该操作对象越界时,停止后续处理步骤,避免出现由于内存越界所导致的程序崩溃等内存问题。
本发明实施例还提供了一种内存管理方法,如图7所示,该方法包括以下步骤:
S31,获取应用程序的内存申请的请求。详细请参照图2所示实施例的S21,在此不再赘述。
S32,基于请求分配第一内存空间,并申请第二内存空间。
其中,第二内存空间用于保存第一内存空间的大小、第一内存空间的引用次数中的至少之一。
详细请参照图2所示实施例的S22,在此不再赘述。
S33,将第一内存空间与第二内存空间进行关联,并记录到预先设置的关联容器中。详细请参照图2所示实施例的S22,在此不再赘述。
S34,获取基于第一内存空间的内存操作指令。详细请参照图2所示实施例的S22,在此不再赘述。
S35,利用关联容器处理内存操作指令。
S351,提取所内存操作指令中的操作对象。详细请参照图2所示实施例的S251,在此不再赘述。
S352,基于操作对象的地址,查询关联容器中是否存在与操作对象的地址对应的元素。详细请参照图2所示实施例的S252,在此不再赘述。
S353,当关联容器中存在与操作对象的地址对应的元素时,基于内存操作指令,修改第一内存空间的引用次数。
当系统在关联容器中查询到与操作对象的地址对应的元素时,表示该操作对象为非空指针,可以继续进行后续的处理步骤。
具体地,基于内存操作指令是创建,或释放与第一内存空间关联的操作对象,对应地修改第一内存空间的引用次数;即:
当内存操作指令用于创建一个与第一内存空间关联的操作对象时,第一内存空间的引用次数加1;
当内存操作指令用于释放一个与第一内存空间关联的操作对象时,第一内存空间的引用次数减1。
其中,关联容器中的第二内存空间中保存的第一内存空间的引用次数决定是否释放对应的第一内存空间。
S354,确定修改后的第一内存空间的引用次数是否为零。
S355,当修改后的第一内存空间的引用次数为零时,释放第一内存空间。
具体的处理逻辑为:内存操作指令每创建一个与第一内存空间关联的对象时,则第一内存空间对应的引用计数值加1;内存操作指令每释放一个与第一内存空间关联的对象时,则第一内存空间对应的引用计数值减1;如果引用计数为0,则释放对应的第一内存空间。
与图2所示实施例相比,本实施例提供的内存管理方法,通过实时修改第二内存空间中的引用计数的数值,用以表示当前引用第一内存空间的次数,在第一内存空间的引用次数为零时,表示第一内存空间对内存操作指令无影响,释放该第一内存空间,以提高内存利用效率。
作为本实施例的一个应用实例,当内存操作指令为赋值操作时(将对象A赋给对象B),具体的赋值操作包括:
(1)判断对象A以及对象B是否为空指针。
基于对象A,以及对象B的地址,在容器中分别查询与对象A以及对象B匹配的内存空间。具体地,判断是否为空指针的逻辑为:根据对象A以及对象B的起始地址,在容器中查询是否存在对应的元素,若存在则为非空指针,若不存在则为空指针。
如果对象A在容器中没有匹配对应的内存空间,则表示对象A为空指针;如果对象B在容器中没有匹配对应的内存空间,则表示对象B为空指针。只有在对象A以及对象B全部匹配到对应的内存空间时,即对象A和对象B全部为非空指针,则进行后续内存指令处理操作。
例如,对象A所匹配出的内存空间为第一内存空间A,对应地第二内存空间A;对象B所匹配出的内存空间为第一内存空间B,对应地第二内存空间B。第二内存空间A用于保存第一内存空间A的地址以及引用计数A,第二内存空间B用于保存第一内存空间B的地址以及引用计数B。
(2)修改对象A所引用的内存空间的引用计数;修改对象B所引用的内存空间的引用计数。
修改对象A对应的第一内存空间A的引用计数A,将引用计数A加1;修改对象B对应的第一内存空间B的引用计数B,将引用计数B减1。
(3)判断引用计数B是否为零。
当引用计数B为0时,则释放对象B对应的第一内存空间B以及第二内存空间B,并在容器中删除对应的对象(即,删除第一内存空间B以及第二内存空间B)。
作为本实施例的另一个应用实例,当内存操作指令为拷贝操作时(将对象A拷贝给对象B),具体的拷贝操作包括:
(1)判断对象A是否为空指针。
(2)当A为空指针时,停止后续拷贝操作。
(3)当A为非空指针时,修改对象A对应的内存空间的引用计数,将引用计数值加1。
作为本实施例的另一个应用实例,当内存操作指令为运算操作时,具体包括:
(1)判断参与运算操作的操作数是否为空指针。
(2)当操作数为非空指针时,利用操作数的地址、大小以及内存空间的大小,判断运算是否会导致越界。
其中,检测越界的逻辑为:通过运算得到的指针地址超出了起始地址到空间结尾地址的范围,则判断越界。
作为本实施例的另一个应用实例,当内存操作指令为内存拷贝(A拷贝给B)时:
首先确认A以及B是否为空指针,若为空指针,则停止拷贝;
若A以及B为非空指针,则根据拷贝的长度参数,确认A以及B是否存在内存越界的问题,如果存在则停止拷贝。
在本实施例中还提供了一种内存管理装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
本实施例提供一种内存管理装置,如图8所示,包括:
第一获取模块41,用于获取应用程序的内存申请的请求。
分配模块42,用于基于所述请求分配第一内存空间,并申请第二内存空间;其中,所述第二内存空间用于保存所述第一内存空间的大小、所述第一内存空间的引用次数中的至少之一。
绑定模块43,用于将所述第一内存空间与所述第二内存空间进行关联,并记录到预先设置的关联容器中。
第二获取模块44,用于获取基于第一内存空间的内存操作指令。
处理模块45,用于利用所述关联容器处理所述内存操作指令。
本实施例提供的内存管理装置,在申请第一内存空间的同时额外申请第二内存空间,该第二内存空间用于保存第一内存空间的性能参数(例如,第一内存空间的大小、引用第一内存空间的次数等等),在后续利用第一内存空间进行操作时,就可以利用第二内存空间中保存的性能参数对判断引用第一内存空间的指针是否为空、基于第一内存空间的操作是否越界等等,从而能够客观解决内存问题,避免人为因素的影响,提高了内存问题处理的效率。
在本实施例的一些可选实施方式中,如图9所示,其中,处理模块45包括:
提取单元451,用于提取所述内存操作指令中的操作对象。
查询单元452,用于基于所述操作对象的地址,查询所述关联容器中是否存在与所述操作对象的地址对应的元素。
空指针停止单元453,用于当所述关联容器中不存在与所述操作对象的地址对应的元素,确定所述操作对象为空指针,停止后续处理步骤。
可选地,如图9所示,该处理模块45还包括:
内存确定单元454,用于当所述关联容器中存在与所述操作对象的地址对应的元素时,确定与所述操作对象对应的所述第一内存空间的大小;
内存空间计算单元455,用于基于所述操作对象的地址以及所述操作对象的长度,计算所述操作对象所需的内存空间的大小;
比较单元456,用于比较确定出的所述第一内存空间的大小与计算出的所述内存空间的大小关系;
内存越界确定单元457,用于当计算出的所述内存空间大于所述确定出的所述第一内存空间的大小时,确定内存越界,停止后续处理步骤。
本实施例中的内存管理装置是以功能单元的形式来呈现,这里的单元是指ASIC电路,执行一个或多个软件或固定程序的处理器和存储器,和/或其他可以提供上述功能的器件。
上述各个模块的更进一步的功能描述与上述对应实施例相同,在此不再赘述。
本发明实施例还提供了一种电子设备,如图10所示,该电子设备可以包括处理器51和存储器52,其中处理器51和存储器52可以通过总线或者其他方式连接,图10中以通过总线连接为例。
处理器51可以为中央处理器(Central Processing Unit,CPU)。处理器51还可以为其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等芯片,或者上述各类芯片的组合。
存储器52作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序、非暂态计算机可执行程序以及模块,如本发明实施例中的内存管理方法对应的程序指令/模块(例如,图8所示的第一获取模块41、分配模块42、绑定模块43、第二获取模块44以及处理模块45)。处理器51通过运行存储在存储器52中的非暂态软件程序、指令以及模块,从而执行处理器的各种功能应用以及数据处理,即实现上述方法实施例中的内存管理方法。
存储器52可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储处理器51所创建的数据等。此外,存储器52可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施例中,存储器52可选包括相对于处理器51远程设置的存储器,这些远程存储器可以通过网络连接至处理器51。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
所述一个或者多个模块存储在所述存储器52中,当被所述处理器51执行时,执行如图1-7所示实施例中的内存管理方法。
上述电子设备具体细节可以对应参阅图1至图7所示的实施例中对应的相关描述和效果进行理解,此处不再赘述。
本领域技术人员可以理解,实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)、随机存储记忆体(Random AccessMemory,RAM)、快闪存储器(Flash Memory)、硬盘(Hard Disk Drive,缩写:HDD)或固态硬盘(Solid-State Drive,SSD)等;所述存储介质还可以包括上述种类的存储器的组合。
虽然结合附图描述了本发明的实施例,但是本领域技术人员可以在不脱离本发明的精神和范围的情况下作出各种修改和变型,这样的修改和变型均落入由所附权利要求所限定的范围之内。
Claims (10)
1.一种内存管理方法,其特征在于,包括:
获取应用程序的内存申请的请求;
基于所述请求分配第一内存空间,并申请第二内存空间;其中,所述第二内存空间用于保存所述第一内存空间的大小、所述第一内存空间的引用次数中的至少之一;
将所述第一内存空间与所述第二内存空间进行关联,并记录到预先设置的关联容器中;
获取基于所述第一内存空间的内存操作指令;其中,所述内存操作指令包括拷贝操作、赋值操作、运算或内存拷贝操作;
利用所述关联容器以及所述内存操作指令中操作对象的地址处理所述内存操作指令。
2.根据权利要求1所述的方法,其特征在于,所述利用所述关联容器处理所述内存操作指令,包括:
提取所述内存操作指令中的操作对象;
基于所述操作对象的地址,查询所述关联容器中是否存在与所述操作对象的地址对应的元素;
当所述关联容器中不存在与所述操作对象的地址对应的元素时,确定所述操作对象为空指针,停止后续处理步骤。
3.根据权利要求2所述的方法,其特征在于,还包括:
当所述关联容器中存在与所述操作对象的地址对应的元素时,确定与所述操作对象对应的所述第一内存空间的大小;
基于所述操作对象的地址以及所述操作对象的长度,计算所述操作对象所需的内存空间的大小;
比较确定出的所述第一内存空间与计算出的所述内存空间的大小关系;
当计算出的所述内存空间大于所述确定出的所述第一内存空间时,确定内存越界,停止后续处理步骤。
4.根据权利要求2所述的方法,其特征在于,所述利用所述关联容器处理所述内存操作指令,包括:
当所述关联容器中存在与所述操作对象的地址对应的元素时,基于所述内存操作指令,修改所述第一内存空间的引用次数;
确定修改后的所述第一内存空间的引用次数是否为零;
当修改后的所述第一内存空间的引用次数为零时,释放所述第一内存空间。
5.根据权利要求4所述的方法,其特征在于,所述基于所述内存操作指令,修改所述第一内存空间的引用次数,包括:
当所述内存操作指令用于创建一个与所述第一内存空间关联的操作对象时,所述第一内存空间的引用次数加1;
当所述内存操作指令用于释放一个与所述第一内存空间关联的操作对象时,所述第一内存空间的引用次数减1。
6.根据权利要求1-5中任一项所述的方法,其特征在于,所述利用关联容器,绑定所述第一内存空间与所述第二内存空间,包括:
分别记录所述第一内存空间的地址以及所述第二内存空间的地址,以得到两个内存空间的地址;
将两个所述内存空间的地址插入所述关联容器中。
7.一种内存管理装置,其特征在于,包括:
第一获取模块,用于获取应用程序的内存申请的请求;
分配模块,用于基于所述请求分配第一内存空间,并申请第二内存空间;其中,所述第二内存空间用于保存所述第一内存空间的大小、所述第一内存空间的引用次数中的至少之一;
绑定模块,用于将所述第一内存空间与所述第二内存空间进行关联,并记录到预先设置的关联容器中;
第二获取模块,用于获取基于所述第一内存空间的基于内存操作指令;其中,所述内存操作指令包括拷贝操作、赋值操作、运算或内存拷贝操作;
处理模块,用于利用所述关联容器以及所述内存操作指令中操作对象的地址处理所述内存操作指令。
8.根据权利要求7所述的装置,其特征在于,所述处理模块,包括:
提取单元,用于提取所述内存操作指令中的操作对象;
查询单元,用于基于所述操作对象的地址,查询所述关联容器中是否存在与所述操作对象的地址对应的元素;
空指针停止单元,用于当所述关联容器中不存在与所述操作对象的地址对应的元素,确定所述操作对象为空指针,停止后续处理步骤。
9.一种电子设备,其特征在于,包括:存储器和处理器,所述存储器和所述处理器之间互相通信连接,所述存储器中存储有计算机指令,所述处理器通过执行所述计算机指令,从而执行权利要求1-6任一所述的内存管理方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使所述计算机执行权利要求1-6任一所述的内存管理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810994016.7A CN109343953B (zh) | 2018-08-29 | 2018-08-29 | 内存管理方法、装置及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810994016.7A CN109343953B (zh) | 2018-08-29 | 2018-08-29 | 内存管理方法、装置及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109343953A CN109343953A (zh) | 2019-02-15 |
CN109343953B true CN109343953B (zh) | 2021-03-09 |
Family
ID=65292101
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810994016.7A Active CN109343953B (zh) | 2018-08-29 | 2018-08-29 | 内存管理方法、装置及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109343953B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114489592A (zh) * | 2021-12-24 | 2022-05-13 | 杭州加速科技有限公司 | 一种内存管理库的实现方法及内存模型 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100530110C (zh) * | 2005-12-08 | 2009-08-19 | 中兴通讯股份有限公司 | 嵌入式系统中自动监测内存泄漏与内存越界的系统 |
CN102685590B (zh) * | 2012-05-14 | 2014-12-10 | 深圳市九洲电器有限公司 | 机顶盒内存管理方法及装置 |
CN103838859B (zh) * | 2014-03-19 | 2019-04-26 | 厦门雅迅网络股份有限公司 | 一种减少linux下多进程间数据拷贝的方法 |
CN106919454B (zh) * | 2017-01-25 | 2020-02-21 | 安科讯(福建)科技有限公司 | 基于lte协议栈的内存池问题定位方法及其系统 |
-
2018
- 2018-08-29 CN CN201810994016.7A patent/CN109343953B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN109343953A (zh) | 2019-02-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107066498B (zh) | 键值kv存储方法和装置 | |
WO2018072408A1 (zh) | 一种内存分析方法、装置、系统以及计算设备 | |
US20140351547A1 (en) | Linked list for lock-free memory allocation | |
CN110765076B (zh) | 数据存储方法、装置、电子设备及存储介质 | |
CN108664394B (zh) | 一种内存泄露过程追溯方法及装置 | |
CN112835528A (zh) | 脏页刷新方法和装置、电子设备和存储介质 | |
CN112214388A (zh) | 内存监控方法、装置、设备及计算机可读存储介质 | |
CN109343953B (zh) | 内存管理方法、装置及电子设备 | |
US9778969B2 (en) | Automatic memory leak detection | |
CN110647463B (zh) | 一种恢复测试断点的方法、装置、电子设备 | |
US10417121B1 (en) | Monitoring memory usage in computing devices | |
CN106354624B (zh) | 一种自动化测试方法和装置 | |
CN109656825B (zh) | 美术资源处理的方法及装置、电子设备、存储介质 | |
CN108197005B (zh) | Ios应用的底层运行性能监测方法、介质、设备及系统 | |
CN113127314A (zh) | 一种检测程序性能瓶颈的方法、装置及计算机设备 | |
US20120144136A1 (en) | Restoration of data from a backup storage volume | |
CN110659194A (zh) | 一种动态内存检测的方法、装置及存储介质 | |
CN115328851A (zh) | 一种数据保护方法、装置、设备及介质 | |
CN111143418B (zh) | 一种数据库读取数据方法、装置、设备及存储介质 | |
CN110598473B (zh) | 一种移动存储介质管理方法、装置及设备和存储介质 | |
CN113434938A (zh) | Bim模型的检查方法、装置、计算机设备及存储介质 | |
US8359456B2 (en) | Generating random addresses for verification of distributed computerized devices | |
EP2960798A1 (en) | Automatic memory leak detection | |
CN111737223A (zh) | 一种文件拷贝方法、装置、设备及存储介质 | |
CN111625302A (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 |