一种内存处理方法及装置与流程

文档序号:15384946发布日期:2018-09-08 00:27阅读:227来源:国知局

本申请涉及计算机技术领域,尤其涉及一种内存处理方法及装置。



背景技术:

在程序运行过程中,需要避免重复释放内存,从而避免因此引发的系统崩溃等问题,现有技术中通常是通过构建哈希桶避免重复释放内存。需要释放内存时,首先在哈希桶中查找是否已存入了对应的内存指针,如果未查找到对应的内存指针,则表明为首次释放,可以释放内存并将对应的指针存入哈希桶中;如果查找到对应的内存指针,则表明非首次释放,则不可再释放该内存,从而避免重复释放。这种方法每次释放内存之前需要现在哈希桶中查找对应的内存指针,因此对释放内存的效率影响较大。



技术实现要素:

有鉴于此,本申请提供一种内存处理方法及装置,技术方案如下:

发起内存申请,并获得所申请的内存;其中,所述内存申请中携带申请空间的大小信息,所述申请空间的大小包括基本运行空间的大小信息、及预定申请的标记空间的大小信息;

在接收到内存释放通知的情况下,确定需要释放的基本运行空间、及对应的标记空间;

判断确定的标记空间中是否存在已释放标记,若否,则释放确定的基本运行空间,并将已释放标记写入该标记空间。

内存申请模块,用于发起内存申请,并获得所申请的内存;其中,所述内存申请中携带申请空间的大小信息,所述申请空间的大小包括基本运行空间的大小信息、及预定申请的标记空间的大小信息;

空间确定模块,用于在接收到内存释放通知的情况下,确定需要释放的基本运行空间、及对应的标记空间;

标志处理模块,用于判断确定的标记空间中是否存在已释放标记,若否,则释放确定的基本运行空间,并将已释放标记写入该标记空间。

本申请所提供的技术方案,在申请内存空间时,将多申请额外的标记空间,用于在首次释放该内存空间时写入已释放标记,而之后如果出现再次重复释放该内存空间的情况,由于标记空间中已经写入了已释放标记,将可以避免该内存空间被重复释放,从而在减小对释放内存效率的影响的同时,避免因重复释放内存而引发系统崩溃等问题。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。

此外,本申请中的任一实施例并不需要达到上述的全部效果。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。

图1是本申请的内存处理方法的流程示意图;

图2是本申请实施例的申请内存空间的结构示意图;

图3是本申请内存处理方法的一种具体实施方式的流程示意图;

图4是本申请内存处理装置的一种结构示意图;

图5是本申请内存处理装置的另一种结构示意图。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。

在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。

计算机设备的应用程序在申请内存后,还需将内存释放,以避免发生内存泄漏,造成程序运行速度减慢,甚至是耗尽系统资源而使系统崩溃。但开发人员在进行应用程序的开发时,也可能会由于失误而多次释放同一内存,而内存重复释放也可能导致系统内存分配混乱、程序运行错误及计算机设备死机等问题。

可以理解的是,本申请中的计算机设备,可以指台式电脑、笔记本电脑等设备,也可以指智能手机、平板电脑等移动设备,还可以指交换机、路由器等网络设备,只要是能够运行应用程序的计算机设备,本申请对具体的设备类型不进行限定。

通过构建哈希桶,可以有效避免内存重复释放。首先构建用于记录已释放内存指针的哈希桶,在释放某一内存前,首先在构建的哈希桶内查找,是否存在该内存的指针。如果不存在,则表示该内存为首次被释放,可以计算该内存指针的哈希值,得到其序列号并根据序列号,将该被释放内存的内存指针存入构建的哈希桶中。如果哈希桶中已经存在该内存指针,则表明该内存已经被释放,将不会再次释放该内存,从而避免发生内存重复释放。

但是,上述方案在每一次释放内存前,都需要在构建的哈希桶中遍历查找一次内存指针,这一过程可能会消耗一定的时间,因而将会降低释放内存的效率。

为了解决上述问题,本申请提供一种内存处理方法,参见图1所示,该方法可以包括以下步骤:

s101,发起内存申请,并获得所申请的内存;其中,所述内存申请中携带申请空间的大小信息,所述申请空间的大小包括基本运行空间的大小信息、及预定申请的标记空间的大小信息;

本申请方案中,应用程序在申请内存时,除申请运行所必需的基本运行空间外,再额外申请一部分用于存入标记的标记空间,即应用程序发起的内存申请中,携带的申请空间的大小信息,包括基本运行空间的大小信息及标记空间的大小信息两部分。例如,假设应用程序需要申请64kb的内存,如图2(a)所示,为现有技术中所分配的内存示意图,而本申请方案中所分配的内存示意图,可以如图2(b)所示,额外申请几个byte(如8byte)的内存空间作为标记空间。

s102,在接收到内存释放通知的情况下,确定需要释放的基本运行空间、及对应的标记空间;

s103,判断确定的标记空间中是否存在已释放标记,若否,则释放确定的基本运行空间,并将已释放标记写入该标记空间。

为了便于描述,将s102与s103一并描述。

本申请方案额外申请标记空间,是用于存放对应基本运行空间的已释放标记。在应用程序需要释放对应的基本运行空间时,首先判断该标记空间中是否存在已释放标记,如果不存在,则可以认为该基本运行空间未被释放,本次释放为首次释放,因而可以释放该基本运行空间,并将已释放标记写入该标记空间。本申请方案中,对于释放基本运行空间与将已释放标记写入对应标记空间的执行顺序,不进行限定。

此外,在首次释放该基本运行空间前,该标记空间中可以为空,在首次释放该基本运行空间时,将已释放标记写入该标记空间;也可以在申请获得该标记空间后,将标识该基本运行空间已申请或未释放等的标记,写入该标记空间,在首次释放该基本运行空间时,再将已释放标记写入该标记空间,并删除或者忽略之前写入的标记,可以理解的是,本申请方案中,只要能够实现首次释放后该标记空间中写入已释放标记的效果即可。

在本申请的一种具体实施方式中,在应用程序需要释放基本运行空间,而判断对应标记空间中是否存在已释放标记时,如果存在,则表明该基本运行空间已经被释放过,再次释放将发生重复释放,因而本次将不会释放该基本运行空,并且进一步地,可以发出内存重复释放提示,提示开发人员或者用户发生了内存重复释放。具体地,可以获得该已释放标记对应的、释放确定的基本运行空间的函数的信息、及当前释放确定的基本运行空间的函数的信息;根据获得的信息,发出内存重复释放提示。

为了获得该已释放标记对应的、释放确定的基本运行空间的函数的信息,在本申请的一种具体实施方式中,可以在将已释放标记写入该标记空间时,获得释放确定的基本运行空间的函数的信息,并且将获得的信息写入该标记空间中,发生内存重复释放时,则可以直接从标记空间中获得之前写入的函数信息。本具体实施例的一种流程示意图可以如图3所示。

本具体实施方式中,在发出内存重复释放提示之前,获得函数信息的目的,是使开发人员或用户可以根据提示对重复释放同一内存的函数进行修改,从而修正这一错误,因此,所述函数的信息可以包括:函数地址;函数地址及函数符号;或者,函数地址、函数符号及释放语句行号,除此之外,也可以包括其他能够对函数进行定位的函数信息,本申请对此不进行限定。

可见,应用本申请方案,在申请内存空间时,通过额外申请的标记空间,可以避免发生重复释放,且由于标记空间与基本运行空间为共同申请的、一般为连续的内存空间,因此确定标记空间中是否存在已释放标记的过程,耗时将小于在哈希桶中进行查找的过程,因而不会降低内存释放的效率。

相应于上述方法实施例,本申请还提供一种内存处理装置,参见图4所示,该装置可以包括:

内存申请模块110,用于发起内存申请,并获得所申请的内存;其中,所述内存申请中携带申请空间的大小信息,所述申请空间的大小包括基本运行空间的大小信息、及预定申请的标记空间的大小信息;

空间确定模块120,用于在接收到内存释放通知的情况下,确定需要释放的基本运行空间、及对应的标记空间;

内存释放模块130,用于判断确定的标记空间中是否存在已释放标记,若否,则释放确定的基本运行空间,并将已释放标记写入该标记空间。

在本申请的一种具体实施方式中,参见图5所示,所述装置可以进一步包括:

信息获得模块140,用于获得该已释放标记对应的、释放确定的基本运行空间的函数的信息、及当前释放确定的基本运行空间的函数的信息;

提示发出模块150,用于根据获得的信息,发出内存重复释放提示。

在本申请的一种具体实施方式中,所述信息获得模块,具体可以用于:

获得确定的标记空间中的函数信息,所述函数信息为:在将已释放标记写入该标记空间时,获得并写入该标记空间的、释放确定的基本运行空间的函数的信息。

在本申请的一种具体实施方式中,所述函数的信息可以包括:

函数地址;函数地址及函数符号;或者,函数地址、函数符号及释放语句行号。

上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。

对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

虽然本说明书包含许多具体实施细节,但是这些不应被解释为限制任何发明的范围或所要求保护的范围,而是主要用于描述特定发明的具体实施例的特征。本说明书内在多个实施例中描述的某些特征也可以在单个实施例中被组合实施。另一方面,在单个实施例中描述的各种特征也可以在多个实施例中分开实施或以任何合适的子组合来实施。此外,虽然特征可以如上所述在某些组合中起作用并且甚至最初如此要求保护,但是来自所要求保护的组合中的一个或多个特征在一些情况下可以从该组合中去除,并且所要求保护的组合可以指向子组合或子组合的变型。

类似地,虽然在附图中以特定顺序描绘了操作,但是这不应被理解为要求这些操作以所示的特定顺序执行或顺次执行、或者要求所有例示的操作被执行,以实现期望的结果。在某些情况下,多任务和并行处理可能是有利的。此外,上述实施例中的各种系统模块和组件的分离不应被理解为在所有实施例中均需要这样的分离,并且应当理解,所描述的程序组件和系统通常可以一起集成在单个软件产品中,或者封装成多个软件产品。

由此,主题的特定实施例已被描述。其他实施例在所附权利要求书的范围以内。在某些情况下,权利要求书中记载的动作可以以不同的顺序执行并且仍实现期望的结果。此外,附图中描绘的处理并非必需所示的特定顺序或顺次顺序,以实现期望的结果。在某些实现中,多任务和并行处理可能是有利的。

以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1