一种内存管理方法、装置、设备及可读存储介质制造方法及图纸

技术编号:19009005 阅读:36 留言:0更新日期:2018-09-22 08:54
本发明专利技术公开了一种内存管理方法,该方法包括以下步骤:当获取到目标函数发送的内存释放请求时,在预设堆栈中查找目标函数和目标函数的子函数分别对应的栈元素;释放查找出的栈元素对应的内存。获取到内存释放请求时,可以在预设堆栈中查找出目标函数以及其子函数分别对应的栈元素。然后,释放查找出的栈元素对应的内存。如此,便可降低因未明确表示释放某内存而导致内存一直未释放即长期占有内存的几率,进一步可减少内存泄漏,提高内存使用率,进一步提升计算机性能。本发明专利技术还公开了一种内存管理装置、设备及可读存储介质,具有相应的技术效果。

Memory management method, device, device and readable storage medium

The invention discloses a memory management method, which comprises the following steps: when the memory release request sent by the target function is obtained, the stack elements corresponding to the sub-functions of the target function and the target function are searched in the preset stack, and the memory corresponding to the found stack elements is released. When a memory release request is obtained, the stack elements corresponding to the target function and its subfunctions can be found in the default stack. Then, release the memory corresponding to the stack element found. In this way, it can reduce the probability that memory has not been freed or occupied for a long time because of not explicitly indicating the release of a certain memory, further reduce memory leaks, improve memory utilization, and further improve computer performance. The invention also discloses a memory management device, a device and a readable storage medium, which have corresponding technical effects.

【技术实现步骤摘要】
一种内存管理方法、装置、设备及可读存储介质
本专利技术涉及计算机应用
,特别是涉及一种内存管理方法、装置、设备及可读存储介质。
技术介绍
在c语言中,使用malloc(memoryallocation,动态内存分配)等内存分配函数获取内存即是从堆中分配内存。从堆中分配的内存需要程序员手动释放(如在函数结尾处明确写出或表示释放该内存的指令,或在结束内存使用时,明确表示释放该内存的请求)。如果不释放,而系统内存管理器又不能自动回收这些堆内存,那这些内存就一直被占用。如果一直申请堆内存,而不释放,内存会越来越少,很明显的结果是系统变慢或者申请不到新的堆内存。而过度的申请堆内存,会导致堆被压爆,出现内存泄漏。现有的,内存管理模块,可简化上述申请和释放动态内存的过程,为程序员提供内存跟踪信息。但是,在使用这些内存管理模块时,每一个内存释放时都需要程序员明确的做出释放等问题。在这种情况下,仍会导致堆内存未释放或无法释放,进一步造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。综上所述,如何有效地解决内存泄漏等问题,是目前本领域技术人员急需解决的技术问题。
技术实现思路
本专利技术的目的是提供一种内存管理方法、装置、设备及可读存储介质,以减少内存泄漏。为解决上述技术问题,本专利技术提供如下技术方案:一种内存管理方法,包括:当获取到目标函数发送的内存释放请求时,在预设堆栈中查找所述目标函数和所述目标函数的子函数分别对应的栈元素;释放查找出的栈元素对应的内存。优选地,在所述在预设堆栈中查找所述目标函数和所述目标函数的子函数分别对应的栈元素之前,还包括:按照函数调用顺序将各个函数分别对应的栈元素压入预设堆栈中。优选地,在所述在预设堆栈中查找所述目标函数和所述目标函数的子函数分别对应的栈元素之前,还包括:当接收到内存申请请求时,在预设堆栈中查找是否存在相同申请位置的第一栈元素;如果是,则将所述第一栈元素的值作为所述内存申请请求的context;如果否,则将所述内存申请请求中的context作为新建第二栈元素的值并存入所述预设堆栈。优选地,在所述在预设堆栈中查找所述目标函数和所述目标函数的子函数分别对应的栈元素之前,还包括:新建Key结构数组,并将各个线程分别对应的堆内存的地址作为线程私有数据放入所述Key结构数组中。优选地,所述释放查找出的栈元素对应的内存,包括:将查找出的栈元素与所述Key结构数组中的key进行比较,释放属于当前线程的栈元素对应的内存。一种内存管理装置,包括:栈元素查找模块,用于当获取到目标函数发送的内存释放请求时,在预设堆栈中查找所述目标函数和所述目标函数的子函数分别对应的栈元素;内存释放模块,用于释放查找出的栈元素对应的内存。优选地,还包括:栈元素存储模块,用于在所述在预设堆栈中查找与所述内存释放请求对应的目标栈元素之前,按照函数调用顺序将各个函数分别对应的栈元素压入预设堆栈中。优选地,还包括:Key结构数组创建模块,用于在所述在预设堆栈中查找与所述内存释放请求对应的目标栈元素之前,新建Key结构数组,并将各个线程分别对应的堆内存的地址作为线程私有数据放入所述Key结构数组中。一种内存管理设备,包括:存储器,用于存储计算机程序;处理器,用于执行所述计算机程序时实现上述内存管理方法的步骤。一种可读存储介质,所述可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述内存管理方法的步骤。应用本专利技术实施例所提供的方法,当获取到目标函数发送的内存释放请求时,在预设堆栈中查找目标函数和目标函数的子函数分别对应的栈元素;释放查找出的栈元素对应的内存。因目标函数与其子函数之间存在调用关系或嵌套关系,当明确目标函数对应的内存可释放时,显然地,子函数的内存也可以释放。在这种情况下,对于目标函数的子函数对应的内存,无需继续等待明确指定释放该子函数对应的内存的指令或请求的情况下,将其释放。即,获取到内存释放请求时,可以在预设堆栈中查找出目标函数以及其子函数分别对应的栈元素。然后,释放查找出的栈元素对应的内存。如此,便可降低因未明确表示释放某内存而导致内存一直未释放即长期占有内存的几率,进一步可减少内存泄漏,提高内存使用率,进一步提升计算机性能。在本专利技术实施例中,还提供了与上述内存管理方法对应的内存管理装置、设备和可读存储介质,具有上述技术效果,在此不再赘述。附图说明为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本专利技术实施例中一种内存管理方法中实施例一的流程图;图2为本专利技术实施例中一种内存管理方法中实施例三的流程图;图3为本专利技术实施例中的多线程内存管理具体实现示意图;图4为本专利技术实施例中一种内存管理装置的结构示意图;图5为本专利技术实施例中一种内存管理设备的结构示意图。具体实施方式为了使本
的人员更好地理解本专利技术方案,下面结合附图和具体实施方式对本专利技术作进一步的详细说明。显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。实施例一:请参考图1,图1为本专利技术实施例中一种内存管理方法的流程图,该方法包括以下步骤:S101、当获取到目标函数发送的内存释放请求时,在预设堆栈中查找目标函数和目标函数的子函数分别对应的栈元素。在本实施例中,可以预先建立一个堆栈,其中堆栈为数据项按序排列的,只能在一端(称为栈顶(top))对数据项进行插入和删除数据结构,并在预设堆栈中存储栈元素。当获取到内存释放请求时,可以在预设堆栈中查找该目标函数和目标函数的子函数分别对应的栈元素。其中,内存释放请求还可以为携带目标函数以及目标函数的子函数信息的请求,也就是说,通过该内存释放请求可以在预设堆栈中找到目标函数以及目标函数的子函数的栈元素。其中,栈元素与函数的内存context(上下文)具有对应关系,也就是说,通过栈元素可以确定函数的申请的内存。S102、释放查找出的栈元素对应的内存。查找到目标函数与目标函数的子函数对应的栈元素之后,可以通过栈元素与函数内存context之间的对应关系,可以确定出目标函数和目标函数的子函数各自申请的内存,然后将该内存释放。应用本专利技术实施例所提供的方法,当获取到目标函数发送的内存释放请求时,在预设堆栈中查找目标函数和目标函数的子函数分别对应的栈元素;释放查找出的栈元素对应的内存。因目标函数与其子函数之间存在调用关系或嵌套关系,当明确目标函数对应的内存可释放时,显然地,子函数的内存也可以释放。在这种情况下,对于目标函数的子函数对应的内存,无需继续等待明确指定释放该子函数对应的内存的指令或请求的情况下,将其释放。即,获取到内存释放请求时,可以在预设堆栈中查找出目标函数以及其子函数分别对应的栈元素。然后,释放查找出的栈元素对应的内存。如此,便可降低因未明确表示释放某内存而导致内存一直未释放即长期占有内存的几率,进一步可减少内存泄漏,提高内存使用率,进一步提升计算机本文档来自技高网
...
一种内存管理方法、装置、设备及可读存储介质

【技术保护点】
1.一种内存管理方法,其特征在于,包括:当获取到目标函数发送的内存释放请求时,在预设堆栈中查找所述目标函数和所述目标函数的子函数分别对应的栈元素;释放查找出的栈元素对应的内存。

【技术特征摘要】
1.一种内存管理方法,其特征在于,包括:当获取到目标函数发送的内存释放请求时,在预设堆栈中查找所述目标函数和所述目标函数的子函数分别对应的栈元素;释放查找出的栈元素对应的内存。2.根据权利要求1所述的内存管理方法,其特征在于,在所述在预设堆栈中查找所述目标函数和所述目标函数的子函数分别对应的栈元素之前,还包括:按照函数调用顺序将各个函数分别对应的栈元素压入预设堆栈中。3.根据权利要求1所述的内存管理方法,其特征在于,在所述在预设堆栈中查找所述目标函数和所述目标函数的子函数分别对应的栈元素之前,还包括:当接收到内存申请请求时,在预设堆栈中查找是否存在相同申请位置的第一栈元素;如果是,则将所述第一栈元素的值作为所述内存申请请求的context;如果否,则将所述内存申请请求中的context作为新建第二栈元素的值并存入所述预设堆栈。4.根据权利要求1至3任一项所述的内存管理方法,其特征在于,在所述在预设堆栈中查找所述目标函数和所述目标函数的子函数分别对应的栈元素之前,还包括:新建Key结构数组,并将各个线程分别对应的堆内存的地址作为线程私有数据放入所述Key结构数组中。5.根据权利要求4所述的内存管理方法,其特征在于,所述释放查找出的栈元素对应的内存...

【专利技术属性】
技术研发人员:楚光庆
申请(专利权)人:郑州云海信息技术有限公司
类型:发明
国别省市:河南,41

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1