优化内存管理方法、装置、电子设备以及存储介质制造方法及图纸

技术编号:35142612 阅读:13 留言:0更新日期:2022-10-05 10:19
本公开关于一种优化内存管理方法、装置、电子设备以及存储介质,涉及计算机技术领域。本公开实施例至少解决相关技术中,优化内存管理器的方式不能全权接管内存的分配和管理的问题。该方法包括:获取第一内存管理函数的第一函数地址,第一内存管理函数为系统内存管理函数;将第一函数地址对应的内存权限设置为写权限;将第一函数地址替换为第二内存管理函数的第二函数地址,第二内存管理函数为预置内存管理函数;通过第二函数地址,调用第二内存管理函数以动态分配内存。如此,能够提高内存管理过程中分配与释放速度。理过程中分配与释放速度。理过程中分配与释放速度。

【技术实现步骤摘要】
优化内存管理方法、装置、电子设备以及存储介质


[0001]本公开涉及计算机
,尤其涉及一种优化内存管理方法、装置、电子设备以及存储介质。

技术介绍

[0002]在安卓系统场景中,如图1所示,安卓系统应用程序在运行模式为每个应用程序的进程启动一个虚拟机,虚拟机通过JAVA本地接口(Java Native Interface,JNI)访问本地环境,应用程序运行时所需内存可以分为JAVA内存和本地(Native)内存,其中,应用程序中动态库和虚拟机本身使用的内存都是本地内存。在上述进行使用内存时,通常依据内存分配器动态分配内存,具体的,内存分配器通过提供一系列申请内存或释放内存的函数接口,实现动态管理内存。
[0003]在通过内存分配器进行内存管理时,往往出于全局配置的考虑,默认配置并不一定是最优的内存管理方案。由于内存分配器属于系统预置库,是以二进制的形式交付的,对外部调用者而言,只有可以调用的应用程序接口,诸如内存分配与释放的细节,调用者都无法干预。
[0004]在相关技术中,可采用基于过程链接表钩子函数(Procedure Linkage Table Hook,PLT hook)中的malloc hook函数方案优化内存分配器,即通过修改全局偏移量表(global offset table,GOT)的方式来实现函数拦截替换,但是此方案只能接管个别库的内存管理,且此方案只记录了内存管理,没有实现内存释放的逻辑,没有形成一个完整的内存分配器应该支持的功能的全集。具体的,在通过该方案进行优化内存管理器的过程中,只是对内容分配函数进行拦截记录,真正的内存管理的实现还是通过转发给预置系统库完成的,并且仅能拦截个别动态库,并且只能拦截在GOT中导出的函数。
[0005]因此,上述优化内存分配器的方案,不能全权接管内存的分配和管理,动态分配内存的性能较差。

技术实现思路

[0006]本公开提供一种优化内存管理方法、装置、电子设备以及存储介质,以至少解决相关技术中,优化内存分配器的方式不能全权接管内存的分配和管理的问题。本公开的技术方案如下:
[0007]根据本公开实施例的第一方面,提供一种优化内存管理方法,包括:获取第一内存管理函数的第一函数地址,第一内存管理函数为系统内存管理函数;将第一函数地址对应的内存权限设置为写权限;将第一函数地址替换为第二内存管理函数的第二函数地址,第二内存管理函数为预置内存管理函数;通过第二函数地址,调用第二内存管理函数以动态分配内存。
[0008]可选的,上述“获取第一内存管理函数的第一函数地址”,包括:在第一内存管理函数为系统库的导出函数的情况下,将使用动态加载库加载以目标字符为后缀的函数库时为
第一内存管理函数分配的地址,确定为第一函数地址;在第一内存管理函数不为系统库的导出函数的情况下,在当前进程内存映射区域内与第一内容分配函数的函数名称相匹配的地址,确定为第一函数地址。
[0009]可选的,上述“将第一函数地址替换为第二内存管理函数的第二函数地址”,包括:在内联挂钩指令集合中,查找替换指令,替换指令为用于替换函数地址的指令;根据替换指令,将第一函数地址替换为第二内存管理函数的第二函数地址。
[0010]可选的,上述优化内存管理方法还包括:将第一函数地址替换为第二内存管理函数的第二函数地址之后,采用预置函数,清除缓存中的第一函数地址,将第一函数地址对应的内存权限设置为只读权限。
[0011]可选的,上述优化内存管理方法还包括:获取第一内存管理函数的第一函数地址之前,根据第一内存管理函数的函数功能,生成第二内存管理函数;其中,函数功能包括以下至少一项:内存分配、内存释放、内存块分配、内存对齐分配。
[0012]可选的,上述优化内存管理方法还包括:将第一函数地址替换为第二内存管理函数的第二函数地址之后,抓取用于释放已分配内存的目标内存管理函数,目标内存管理函数为第一内存管理函数或第二内存管理函数;在目标内存管理函数为第一内存管理函数的情况下,在第一内存管理函数对应的堆内存区域内释放内存空间;在目标内存管理函数为第二内存管理函数的情况下,在第二内存管理函数对应的堆内存区域内释放内存空间。
[0013]可选的,上述优化内存管理方法还包括:抓取用于释放已分配内存的目标内存管理函数之后,基于目标内存管理函数对应的动态树长度,判断目标内存管理函数为第一内存管理函数,或者第二内存管理函数;或,基于目标内存管理函数中待释放内存的指针标记,判断目标内存管理函数为第一内存管理函数,或者第二内存管理函数。
[0014]根据本公开实施例的第二方面,提供一种优化内存管理装置,包括:获取单元、设置单元、替换单元以及调用单元;获取单元,用于获取第一内存管理函数的第一函数地址,第一内存管理函数为系统内存管理函数;设置单元,用于将获取单元获取的第一函数地址对应的内存权限设置为写权限;替换单元,用于将获取单元获取的第一函数地址替换为第二内存管理函数的第二函数地址,第二内存管理函数为预置内存管理函数;调用单元,用于通过替换单元替换的第二函数地址,调用第二内存管理函数以动态分配内存。
[0015]可选的,上述获取单元,用于:在第一内存管理函数为系统库的导出函数的情况下,将使用动态加载库加载以目标字符为后缀的函数库时为第一内存管理函数分配的地址,确定为第一函数地址;在第一内存管理函数不为系统库的导出函数的情况下,在当前进程内存映射区域内与第一内容分配函数的函数名称相匹配的地址,确定为第一函数地址。
[0016]可选的,上述替换单元,用于:在内联挂钩指令集合中,查找替换指令,替换指令为用于替换函数地址的指令;根据替换指令,将第一函数地址替换为第二内存管理函数的第二函数地址。
[0017]可选的,上述优化内存管理装置还包括处理单元;处理单元,用于替换单元将第一函数地址替换为第二内存管理函数的第二函数地址之后,采用预置函数,清除缓存中的第一函数地址,将第一函数地址对应的内存权限设置为只读权限。
[0018]可选的,上述优化内存管理装置还包括生成单元;生成单元,用于获取单元获取第一内存管理函数的第一函数地址之前,根据第一内存管理函数的函数功能,生成第二内存
管理函数;其中,函数功能包括以下至少一项:内存分配、内存释放、内存块分配、内存对齐分配。
[0019]可选的,上述优化内存管理装置还包括抓取单元和释放单元;抓取单元,用于替换单元将第一函数地址替换为第二内存管理函数的第二函数地址之后,抓取用于释放已分配内存的目标内存管理函数,目标内存管理函数为第一内存管理函数或第二内存管理函数;释放单元,用于在抓取单元抓取的目标内存管理函数为第一内存管理函数的情况下,在第一内存管理函数对应的堆内存区域内释放内存空间;释放单元,还用于在抓取单元抓取的目标内存管理函数为第二内存管理函数的情况下,在第二内存管理函数对应的堆内存区域内释放内存空间。
[0020]可选的,上述优化内存管理装置还包括判断单元;判断单元,用于抓取单元抓本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种优化内存管理方法,其特征在于,包括:获取第一内存管理函数的第一函数地址,所述第一内存管理函数为系统内存管理函数;将所述第一函数地址对应的内存权限设置为写权限;将所述第一函数地址替换为第二内存管理函数的第二函数地址,所述第二内存管理函数为预置内存管理函数;通过所述第二函数地址,调用所述第二内存管理函数以动态分配内存。2.根据权利要求1所述的优化内存管理方法,其特征在于,所述获取第一内存管理函数的第一函数地址,包括:在所述第一内存管理函数为系统库的导出函数的情况下,将使用动态加载库加载以目标字符为后缀的函数库时为所述第一内存管理函数分配的地址,确定为所述第一函数地址;在所述第一内存管理函数不为所述系统库的导出函数的情况下,在当前进程内存映射区域内与所述第一内容分配函数的函数名称相匹配的地址,确定为所述第一函数地址。3.根据权利要求1所述的优化内存管理方法,其特征在于,所述将所述第一函数地址替换为第二内存管理函数的第二函数地址,包括:在内联挂钩指令集合中,查找替换指令,所述替换指令为用于替换函数地址的指令;根据所述替换指令,将所述第一函数地址替换为第二内存管理函数的第二函数地址。4.根据权利要求1所述的优化内存管理方法,其特征在于,所述将所述第一函数地址替换为第二内存管理函数的第二函数地址之后,所述方法还包括:采用预置函数,清除缓存中的所述第一函数地址,将所述第一函数地址对应的内存权限设置为只读权限。5.根据权利要求1所述的优化内存管理方法,其特征在于,所述获取第一内存管理函数的第一函数地址之前,所述方法还包括:根据所述第一内存管理函数的函数功能,生成所述第二内存管理函数;其中,所述函数功能包括以下至少一项:内存分配、内存释放、内存块分配、内存对齐分配。6.根据权...

【专利技术属性】
技术研发人员:李锐
申请(专利权)人:北京达佳互联信息技术有限公司
类型:发明
国别省市:

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

1