一种内存处理方法及装置

阅读: 评论:0

著录项
  • CN201810241442.3
  • 20180322
  • CN108509273A
  • 20180907
  • 杭州迪普科技股份有限公司
  • 唐青松
  • G06F9/50
  • G06F9/50

  • 浙江省杭州市滨江区通和路68号中财大厦6楼
  • 浙江(33)
  • 北京博思佳知识产权代理有限公司
  • 林祥
摘要
本申请提供一种内存处理方法,其特征在于,所述方法包括:发起内存申请,并获得所申请的内存;其中,所述内存申请中携带申请空间的大小信息,所述申请空间的大小包括基本运行空间的大小信息、及预定申请的标记空间的大小信息;在接收到内存释放通知的情况下,确定需要释放的基本运行空间、及对应的标记空间;判断确定的标记空间中是否存在已释放标记,若否,则释放确定的基本运行空间,并将已释放标记写入该标记空间。应用本申请方案,可以避免因重复释放内存而引发系统崩溃等问题。
权利要求

1.一种内存处理方法,其特征在于,所述方法包括:

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

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

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

2.根据权利要求1所述的方法,其特征在于,在判断确定的标记空间中是否存在已释放 标记后,若是,则该方法进一步包括:

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

根据获得的信息,发出内存重复释放提示。

3.根据权利要求2所述的方法,其特征在于,所述获得该已释放标记对应的、释放该基 本运行空间的函数的信息包括:

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

4.根据权利要求2或3所述的方法,其特征在于,所述函数的信息包括:

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

5.一种内存处理装置,其特征在于,所述装置包括:

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

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

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

6.根据权利要求5所述的装置,其特征在于,该装置进一步包括:

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

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

7.根据权利要求6所述的装置,其特征在于,所述信息获得模块,具体用于:

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

8.根据权利要求6或7所述的装置,其特征在于,所述函数的信息包括:

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

说明书
技术领域

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

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

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

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

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

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

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

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

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

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

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

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

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

图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,用于根据获得的信息,发出内存重复释放提示。

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

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

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

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

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

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

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

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

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

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

本文发布于:2023-04-13 10:48:19,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/1/86442.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图