一种内存处理方法及装置制造方法及图纸

技术编号:31832805 阅读:19 留言:0更新日期:2022-01-12 13:10
本公开提供了一种内存处理方法及装置,其中,该方法首先响应于内存释放请求,将所述内存释放请求指示的目标内存设置为不可读写;然后,响应于针对所述目标内存的异常信息,查找与所述目标内存的地址信息匹配的内存释放记录;最后,基于所述内存释放记录,生成所述目标内存的报错日志;以及,将所述目标内存设置为可读写,并将所述目标内存的占用状态设置为使用中,以防止所述目标内存被申请。本公开实施例通过内存释放记录生成报错日志进行问题定位,同时,将发生异常的目标内存设置为可读写,并将其占用状态设置为使用中,防止应用程序因出现野指针问题导致的崩溃,提高应用程序的稳定性。定性。定性。

【技术实现步骤摘要】
一种内存处理方法及装置


[0001]本公开涉及计算机
,具体而言,涉及一种内存处理方法及装置。

技术介绍

[0002]应用程序通常需要申请内存来存储变量等数据,在使用完成后,会对申请的内存进行释放。在使用申请的内存时,如果对应内存被释放后又进行使用,就会造成程序访问已释放的内存发生崩溃,该类问题通常被称为野指针问题。
[0003]在发现野指针问题后,通常需要触发程序崩溃后才能对野指针进行定位,对于大规模的线上生产环境来说,意味着需要大范围中断服务,严重影响了应用程序的正常运转,仅适用于对应用程序进行测试的场景。

技术实现思路

[0004]本公开实施例至少提供一种内存处理方法及装置。
[0005]第一方面,本公开实施例提供了一种内存处理方法,包括:
[0006]响应于内存释放请求,将所述内存释放请求指示的目标内存设置为不可读写;
[0007]响应于针对所述目标内存的异常信息,查找与所述目标内存的地址信息匹配的内存释放记录;
[0008]基于所述内存释放记录,生成所述目标内存的报错日志;以及,将所述目标内存设置为可读写,并将所述目标内存的占用状态设置为使用中,以防止所述目标内存被申请。
[0009]一种可选的实施方式中,在响应于内存释放请求之前,所述方法还包括:
[0010]向系统申请存储空间大于或等于预设阈值的连续内存,将申请得到的连续内存作为内存分配的内存池,并将所述内存池中的内存设置为不可读写;
[0011]响应于内存申请请求,从所述内存池中选取与所述内存申请请求匹配的内存分配给所述内存申请请求对应的线程,并将分配给所述线程的内存设置为可读写。
[0012]一种可选的实施方式中,所述内存释放记录包括以下至少一种:
[0013]所述目标内存的存储空间大小、申请释放所述目标内存的目标线程的标识信息、所述目标内存对应的地址信息以及所述目标内存对应的栈帧。
[0014]一种可选的实施方式中,在响应于内存申请请求之前,所述方法还包括:
[0015]加载异常信息处理函数;
[0016]所述响应于针对所述目标内存的异常信息,查找与所述目标内存的地址信息匹配的内存释放记录,包括:
[0017]所述响应于针对所述目标内存的异常信息,在所述异常信息处理函数处于加载状态下,利用所述异常信息处理函数查找与所述目标内存的地址信息匹配的内存释放记录。
[0018]一种可选的实施方式中,在将所述目标内存设置为可读写,并将所述目标内存的占用状态设置为使用中之后,所述方法还包括:
[0019]卸载所述异常信息处理函数,以使再次检测到针对所述目标内存的异常信息后,
利用系统内核的初始异常信息处理函数响应所述异常信息。
[0020]第二方面,本公开实施例还提供一种内存处理装置,包括:
[0021]释放模块,用于响应于内存释放请求,将所述内存释放请求指示的目标内存设置为不可读写;
[0022]查找模块,用于响应于针对所述目标内存的异常信息,查找与所述目标内存的地址信息匹配的内存释放记录;
[0023]生成模块,用于基于所述内存释放记录,生成所述目标内存的报错日志;以及,将所述目标内存设置为可读写,并将所述目标内存的占用状态设置为使用中,以防止所述目标内存被申请。
[0024]一种可选的实施方式中,所述装置还包括分配模块,用于:
[0025]向系统申请存储空间大于或等于预设阈值的连续内存,将申请得到的连续内存作为内存分配的内存池,并将所述内存池中的内存设置为不可读写;
[0026]响应于内存申请请求,从所述内存池中选取与所述内存申请请求匹配的内存分配给所述内存申请请求对应的线程,并将分配给所述线程的内存设置为可读写。
[0027]一种可选的实施方式中,所述内存释放记录包括以下至少一种:
[0028]所述目标内存的存储空间大小、申请释放所述目标内存的目标线程的标识信息、所述目标内存对应的地址信息以及所述目标内存对应的栈帧。
[0029]一种可选的实施方式中,所述分配模块在响应于内存申请请求之前,还用于:
[0030]加载异常信息处理函数;
[0031]所述查找模块在响应于针对所述目标内存的异常信息,查找与所述目标内存的地址信息匹配的内存释放记录时,用于:
[0032]所述响应于针对所述目标内存的异常信息,在所述异常信息处理函数处于加载状态下,利用所述异常信息处理函数查找与所述目标内存的地址信息匹配的内存释放记录。
[0033]一种可选的实施方式中,所述装置还包括卸载模块,用于在将所述目标内存设置为可读写,并将所述目标内存的占用状态设置为使用中之后,卸载所述异常信息处理函数,以使再次检测到针对所述目标内存的异常信息后,利用系统内核的初始异常信息处理函数响应所述异常信息。
[0034]第三方面,本公开实施例还提供一种电子设备,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤。
[0035]第四方面,本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤。
[0036]本公开实施例提供的内存处理方法及装置,首先响应于内存释放请求,将所述内存释放请求指示的目标内存设置为不可读写;然后,响应于针对所述目标内存的异常信息,查找与所述目标内存的地址信息匹配的内存释放记录;最后,基于所述内存释放记录,生成所述目标内存的报错日志;以及,将所述目标内存设置为可读写,并将所述目标内存的占用状态设置为使用中,以防止所述目标内存被申请。本公开实施例通过内存释放记录生成报
错日志,来进行问题定位,同时,将发生异常的目标内存设置为可读写,并将其占用状态设置为使用中,使得线程不会再次申请目标内存,再次尝试访问目标内存时也不会因为无效内存或无权限内存触发缺页异常进而防止应用程序因出现野指针问题导致的崩溃,提高应用程序的稳定性。
[0037]为使本公开的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
[0038]为了更清楚地说明本公开实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,此处的附图被并入说明书中并构成本说明书中的一部分,这些附图示出了符合本公开的实施例,并与说明书一起用于说明本公开的技术方案。应当理解,以下附图仅示出了本公开的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
[0039]图1示出了本公开实施例所提供的一种内存处理方法的流程图;
本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种内存处理方法,其特征在于,包括:响应于内存释放请求,将所述内存释放请求指示的目标内存设置为不可读写;响应于针对所述目标内存的异常信息,查找与所述目标内存的地址信息匹配的内存释放记录;基于所述内存释放记录,生成所述目标内存的报错日志;以及,将所述目标内存设置为可读写,并将所述目标内存的占用状态设置为使用中,以防止所述目标内存被申请。2.根据权利要求1所述的方法,其特征在于,在响应于内存释放请求之前,所述方法还包括:向系统申请存储空间大于或等于预设阈值的连续内存,将申请得到的连续内存作为内存分配的内存池,并将所述内存池中的内存设置为不可读写;响应于内存申请请求,从所述内存池中选取与所述内存申请请求匹配的内存分配给所述内存申请请求对应的线程,并将分配给所述线程的内存设置为可读写。3.根据权利要求1所述的方法,其特征在于,所述内存释放记录包括以下至少一种:所述目标内存的存储空间大小、申请释放所述目标内存的目标线程的标识信息、所述目标内存对应的地址信息以及所述目标内存对应的栈帧。4.根据权利要求2所述的方法,其特征在于,在响应于内存申请请求之前,所述方法还包括:加载异常信息处理函数;所述响应于针对所述目标内存的异常信息,查找与所述目标内存的地址信息匹配的内存释放记录,包括:所述响应于针对所述目标内存的异常信息,在所述异常信息处理函数处于加载状态下,利用所述异常信息处理函数查找与所述目标内存的地址信息匹配的内存释放记录。5.根据权利要求4所述的方法,其特征在于,在将所述目标内存设置为可读写,并将所述目标内存的占用状态设置为使用中之后,所述方法还包括:卸载所述异常信息处理函数,以使再次检测到针对所述目标内存...

【专利技术属性】
技术研发人员:庞翔宇
申请(专利权)人:北京字节跳动网络技术有限公司
类型:发明
国别省市:

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

1