CN107562586A - 一种内存检测方法、设备及计算机存储介质 - Google Patents

一种内存检测方法、设备及计算机存储介质 Download PDF

Info

Publication number
CN107562586A
CN107562586A CN201710702349.3A CN201710702349A CN107562586A CN 107562586 A CN107562586 A CN 107562586A CN 201710702349 A CN201710702349 A CN 201710702349A CN 107562586 A CN107562586 A CN 107562586A
Authority
CN
China
Prior art keywords
memory
address set
function
memory space
application program
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201710702349.3A
Other languages
English (en)
Inventor
吕伟
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nubia Technology Co Ltd
Original Assignee
Nubia Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nubia Technology Co Ltd filed Critical Nubia Technology Co Ltd
Priority to CN201710702349.3A priority Critical patent/CN107562586A/zh
Publication of CN107562586A publication Critical patent/CN107562586A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

本发明实施例公开了一种内存检测方法,所述方法应用于终端,所述方法包括:获取应用程序所对应的内存申请函数的第一地址集合和所述应用程序所对应的内存释放函数的第二地址集合;将所述第一地址集合与所述第二地址集合进行比较,获取比较结果;根据所述比较结果确定内存空间是否释放。本发明实施例同时还公开了一种内存检测设备及计算机存储介质。

Description

一种内存检测方法、设备及计算机存储介质
技术领域
本发明涉及终端技术领域,尤其涉及一种内存检测方法、设备及计算机存储介质。
背景技术
应用程序在运行时会给生成的线程申请内存空间以供应用程序正常运行,在应用程序运行完成后通常会释放掉相应的内存空间,以免内存空间出现不需要的占用,从而引起内存空间不足,拖慢应用程序运行速度,甚至导致系统崩溃。
目前,常用的做法为在应用程序结束运行时将所占用的内存空间进行释放。但是在实际使用过程中,在应用程序运行完成后,应用程序所申请的内存空间可能没有被释放,这样就会造成其他应用程序申请内存时出现内存不足的情况。
发明内容
本发明的主要目的在于提出一种内存检测方法、设备及计算机存储介质,旨在对内存空间占用情况进行检测,实现对未释放的内存空间及时进行释放。
为达到上述目的,本发明的技术方案是这样实现的:
第一方面,本发明实施例提供了一种内存检测方法,所述方法包括:
获取应用程序所对应的内存申请函数的第一地址集合和所述应用程序所对应的内存释放函数的第二地址集合;
将所述第一地址集合与所述第二地址集合进行比较,获取比较结果;
根据所述比较结果确定内存空间是否释放。
可选地,所述根据所述比较结果确定内存空间是否释放,包括:
当所述比较结果表征所述第一地址集合与所述第二地址集合中的地址能够匹配时,确定所述内存空间已经释放;
当所述比较结果表征所述第一地址集合与所述第二地址集合中的地址不能够匹配时,确定所述内存空间未释放。
可选地,所述方法还包括:
当确定所述内存空间未释放时,将未释放的内存空间进行释放。
可选地,在所述获取应用程序所对应的内存申请函数的第一地址集合和所述应用程序所对应的内存释放函数的第二地址集合之前,所述方法还包括:
当所述应用程序启动时,生成与所述应用程序相对应的线程;
通过所述内存申请函数为所生成的线程申请内存空间;
当所述应用程序结束运行时,通过所述内存释放函数为所生成的线程释放内存空间。
可选地,所述方法还包括:
在所述内存申请函数和所述内存释放函数中注入HOOK函数;所述HOOK函数为钩子函数,用于记录所述内存申请函数所对应的第一地址集合与所述内存释放函数所对应的第二地址集合。
可选地,所述在所述内存申请函数和所述内存释放函数中注入HOOK函数,包括:
在所述内存申请函数中注入第一HOOK函数;所述第一HOOK函数用于记录所述内存申请函数所对应的第一地址集合;
在所述内存释放函数中注入第二HOOK函数;所述第二HOOK函数用于记录所述内存释放函数所对应的第二地址集合。
可选地,所述将所述第一地址集合与所述第二地址集合进行比较,包括:
调用所述第一HOOK函数中记录的第一地址集合和所述第二HOOK函数中记录的第二地址集合;
将所述第一地址集合中的每一条地址信息与所述第二地址集合中的每一条地址信息逐一进行比较。
可选地,所述方法还包括:
获取所述第二地址集合中不能与所述第一地址集合相匹配的地址信息;其中,所述第二地址集合中不能与所述第一地址集合相匹配的地址信息所对应的内存空间为未释放的内存空间。
第二方面,本发明实施例提供了一种内存检测设备,所述设备包括处理器、存储器及内存;
所述内存,配置为应用程序提供内存空间;
所述存储器,配置为存储内存检测程序;
所述处理器,配置为执行存储器中存储的内存检测程序,以实现以下步骤:
获取应用程序所对应的内存申请函数的第一地址集合和所述应用程序所对应的内存释放函数的第二地址集合;
将所述第一地址集合与所述第二地址集合进行比较,获取比较结果;
根据所述比较结果确定内存空间是否释放。
第三方面,本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有内存检测程序,所述内存检测程序被处理器执行时实现上述的内存检测方法的步骤。
本发明实施例所提供的一种内存检测方法、设备及计算机存储介质,通过对内存申请函数的第一地址集合和内存释放函数的第二地址集合进行比较,获取比较结果,然后根据比较结果判断内存空间是否已经释放,实现了对未释放的内存空间及时进行释放,避免了内存空间的浪费。
附图说明
图1为本发明实施例提供的一种移动终端的硬件结构示意图;
图2为本发明实施例提供的移动终端能够操作的通信系统结构示意图;
图3为本发明实施例一提供的一种内存检测方法流程示意图一;
图4为本发明实施例一提供的一种内存检测方法流程示意图二;
图5为本发明实施例一提供的内存检测提示界面示意图一;
图6为本发明实施例一提供的内存释放提示界面示意图二;
图7为本发明实施例一提供的开启应用程序的操作界面示意图;
图8为本发明实施例一提供的关闭应用程序的操作界面示意图;
图9为本发明实施例一提供的地址匹配示意图;
图10为本发明实施例二提供的一种内存检测方法具体实现流程示意图;
图11为本发明实施例三提供的内存检测设备硬件实体结构示意图。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
在后续的描述中,使用用于表示元件的诸如“模块”、“部件”或“单元”的后缀仅为了有利于本发明的说明,其本身没有特定的意义。因此,“模块”、“部件”或“单元”可以混合地使用。
终端可以以各种形式来实施。例如,本发明中描述的终端可以包括诸如手机、平板电脑、笔记本电脑、掌上电脑、个人数字助理(Personal Digital Assistant,PDA)、便捷式媒体播放器(Portable Media Player,PMP)、导航装置、可穿戴设备、智能手环、计步器等移动终端,以及诸如数字TV、台式计算机等固定终端。
后续描述中将以移动终端为例进行说明,本领域技术人员将理解的是,除了特别用于移动目的的元件之外,根据本发明的实施方式的构造也能够应用于固定类型的终端。
请参阅图1,其为实现本发明各个实施例的一种移动终端的硬件结构示意图,该移动终端100可以包括:RF(Radio Frequency,射频)单元101、WiFi模块102、音频输出单元103、A/V(音频/视频)输入单元104、传感器105、显示单元106、用户输入单元107、接口单元108、存储器109、处理器110、以及电源111等部件。本领域技术人员可以理解,图1中示出的移动终端结构并不构成对移动终端的限定,移动终端可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
下面结合图1对移动终端的各个部件进行具体的介绍:
射频单元101可用于收发信息或通话过程中,信号的接收和发送,具体的,将基站的下行信息接收后,给处理器110处理;另外,将上行的数据发送给基站。通常,射频单元101包括但不限于天线、至少一个放大器、收发信机、耦合器、低噪声放大器、双工器等。此外,射频单元101还可以通过无线通信与网络和其他设备通信。上述无线通信可以使用任一通信标准或协议,包括但不限于GSM(Global System of Mobile communication,全球移动通讯系统)、GPRS(General Packet Radio Service,通用分组无线服务)、CDMA2000(CodeDivision Multiple Access 2000,码分多址2000)、WCDMA(Wideband Code DivisionMultiple Access,宽带码分多址)、TD-SCDMA(Time Division-Synchronous CodeDivision Multiple Access,时分同步码分多址)、FDD-LTE(Frequency DivisionDuplexing-Long Term Evolution,频分双工长期演进)和TDD-LTE(Time DivisionDuplexing-Long Term Evolution,分时双工长期演进)等。
WiFi属于短距离无线传输技术,移动终端通过WiFi模块102可以帮助用户收发电子邮件、浏览网页和访问流式媒体等,它为用户提供了无线的宽带互联网访问。虽然图1示出了WiFi模块102,但是可以理解的是,其并不属于移动终端的必须构成,完全可以根据需要在不改变发明的本质的范围内而省略。
音频输出单元103可以在移动终端100处于呼叫信号接收模式、通话模式、记录模式、语音识别模式、广播接收模式等等模式下时,将射频单元101或WiFi模块102接收的或者在存储器109中存储的音频数据转换成音频信号并且输出为声音。而且,音频输出单元103还可以提供与移动终端100执行的特定功能相关的音频输出(例如,呼叫信号接收声音、消息接收声音等等)。音频输出单元103可以包括扬声器、蜂鸣器等等。
A/V输入单元104用于接收音频或视频信号。A/V输入单元104可以包括图形处理器(Graphics Processing Unit,GPU)1041和麦克风1042,图形处理器1041对在视频捕获模式或图像捕获模式中由图像捕获装置(如摄像头)获得的静态图片或视频的图像数据进行处理。处理后的图像帧可以显示在显示单元106上。经图形处理器1041处理后的图像帧可以存储在存储器109(或其它存储介质)中或者经由射频单元101或WiFi模块102进行发送。麦克风1042可以在电话通话模式、记录模式、语音识别模式等等运行模式中经由麦克风1042接收声音(音频数据),并且能够将这样的声音处理为音频数据。处理后的音频(语音)数据可以在电话通话模式的情况下转换为可经由射频单元101发送到移动通信基站的格式输出。麦克风1042可以实施各种类型的噪声消除(或抑制)算法以消除(或抑制)在接收和发送音频信号的过程中产生的噪声或者干扰。
移动终端100还包括至少一种传感器105,比如光传感器、运动传感器以及其他传感器。具体地,光传感器包括环境光传感器及接近传感器,其中,环境光传感器可根据环境光线的明暗来调节显示面板1061的亮度,接近传感器可在移动终端100移动到耳边时,关闭显示面板1061和/或背光。作为运动传感器的一种,加速计传感器可检测各个方向上(一般为三轴)加速度的大小,静止时可检测出重力的大小及方向,可用于识别手机姿态的应用(比如横竖屏切换、相关游戏、磁力计姿态校准)、振动识别相关功能(比如计步器、敲击)等;至于手机还可配置的指纹传感器、压力传感器、虹膜传感器、分子传感器、陀螺仪、气压计、湿度计、温度计、红外线传感器等其他传感器,在此不再赘述。
显示单元106用于显示由用户输入的信息或提供给用户的信息。显示单元106可包括显示面板1061,可以采用液晶显示器(Liquid Crystal Display,LCD)、有机发光二极管(Organic Light-Emitting Diode,OLED)等形式来配置显示面板1061。
用户输入单元107可用于接收输入的数字或字符信息,以及产生与移动终端的用户设置以及功能控制有关的键信号输入。具体地,用户输入单元107可包括触控面板1071以及其他输入设备1072。触控面板1071,也称为触摸屏,可收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触控面板1071上或在触控面板1071附近的操作),并根据预先设定的程式驱动相应的连接装置。触控面板1071可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器110,并能接收处理器110发来的命令并加以执行。此外,可以采用电阻式、电容式、红外线以及表面声波等多种类型实现触控面板1071。除了触控面板1071,用户输入单元107还可以包括其他输入设备1072。具体地,其他输入设备1072可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆等中的一种或多种,具体此处不做限定。
进一步的,触控面板1071可覆盖显示面板1061,当触控面板1071检测到在其上或附近的触摸操作后,传送给处理器110以确定触摸事件的类型,随后处理器110根据触摸事件的类型在显示面板1061上提供相应的视觉输出。虽然在图1中,触控面板1071与显示面板1061是作为两个独立的部件来实现移动终端的输入和输出功能,但是在某些实施例中,可以将触控面板1071与显示面板1061集成而实现移动终端的输入和输出功能,具体此处不做限定。
接口单元108用作至少一个外部装置与移动终端100连接可以通过的接口。例如,外部装置可以包括有线或无线头戴式耳机端口、外部电源(或电池充电器)端口、有线或无线数据端口、存储卡端口、用于连接具有识别模块的装置的端口、音频输入/输出(I/O)端口、视频I/O端口、耳机端口等等。接口单元108可以用于接收来自外部装置的输入(例如,数据信息、电力等等)并且将接收到的输入传输到移动终端100内的一个或多个元件或者可以用于在移动终端100和外部装置之间传输数据。
存储器109可用于存储软件程序以及各种数据。存储器109可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器109可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
处理器110是移动终端的控制中心,利用各种接口和线路连接整个移动终端的各个部分,通过运行或执行存储在存储器109内的软件程序和/或模块,以及调用存储在存储器109内的数据,执行移动终端的各种功能和处理数据,从而对移动终端进行整体监控。处理器110可包括一个或多个处理单元;优选的,处理器110可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器110中。
移动终端100还可以包括给各个部件供电的电源111(比如电池),优选的,电源111可以通过电源管理系统与处理器110逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。
尽管图1未示出,移动终端100还可以包括蓝牙模块等,在此不再赘述。
为了便于理解本发明实施例,下面对本发明的移动终端所基于的通信网络系统进行描述。
请参阅图2,图2为本发明实施例提供的一种通信网络系统架构图,该通信网络系统为通用移动通信技术的LTE系统,该LTE系统包括依次通讯连接的UE(User Equipment,用户设备)201,E-UTRAN(Evolved UMTS Terrestrial Radio Access Network,演进式UMTS陆地无线接入网)202,EPC(Evolved Packet Core,演进式分组核心网)203和运营商的IP业务204。
具体地,UE201可以是上述终端100,此处不再赘述。
E-UTRAN202包括eNodeB2021和其它eNodeB2022等。其中,eNodeB2021可以通过回程(backhaul)(例如X2接口)与其它eNodeB2022连接,eNodeB2021连接到EPC203,eNodeB2021可以提供UE201到EPC203的接入。
EPC203可以包括MME(Mobility Management Entity,移动性管理实体)2031,HSS(Home Subscriber Server,归属用户服务器)2032,其它MME2033,SGW(Serving Gate Way,服务网关)2034,PGW(PDN Gate Way,分组数据网络网关)2035和PCRF(Policy andCharging Rules Function,政策和资费功能实体)2036等。其中,MME2031是处理UE201和EPC203之间信令的控制节点,提供承载和连接管理。HSS2032用于提供一些寄存器来管理诸如归属位置寄存器(图中未示)之类的功能,并且保存有一些有关服务特征、数据速率等用户专用的信息。所有用户数据都可以通过SGW2034进行发送,PGW2035可以提供UE 201的IP地址分配以及其它功能,PCRF2036是业务数据流和IP承载资源的策略与计费控制策略决策点,它为策略与计费执行功能单元(图中未示)选择及提供可用的策略和计费控制决策。
IP业务204可以包括因特网、内联网、IMS(IP Multimedia Subsystem,IP多媒体子系统)或其它IP业务等。
虽然上述以LTE系统为例进行了介绍,但本领域技术人员应当知晓,本发明不仅仅适用于LTE系统,也可以适用于其他无线通信系统,例如GSM、CDMA2000、WCDMA、TD-SCDMA以及未来新的网络系统等,此处不做限定。
基于上述移动终端硬件结构以及通信网络系统,提出本发明方法各个实施例。
本发明实施例的应用场景与基本思想为:终端在对系统内存占用情况进行检测时,若发现内存泄露,则对终端中的应用程序进行检查。通过对应用程序的内存释放情况进行检查,可以发现因内存未释放从而导致内存泄露的应用程序。终端在对应用程序进行检测时,在被检查的应用程序中注入HOOK函数,通过HOOK函数所对应的记录内存申请函数与内存释放函数的地址,然后对比内存申请函数与内存释放函数的地址,从而检测出导致内存泄露的应用程序。在找出导致内存泄露的应用程序之后,将未释放的内存空间进行释放,从而解决了系统内存泄露的问题。
需要说明的是,注入HOOK函数的过程为动态注入过程,并没有改变被检测的应用程序的源代码。终端只需要在被检测的应用程序中注入HOOK函数即可对应用程序的内存占用情况进行检测,这样,终端无需获取应用程序的源代码就可以实现对系统内存空间的实时检测。
实施例一
参见图3,其示出了本发明实施例提供的一种内存检测方法,该方法应用于终端,所述方法包括:
S101、获取应用程序所对应的内存申请函数的第一地址集合和应用程序所对应的内存释放函数的第二地址集合;
S102、将第一地址集合与第二地址集合进行比较,获取比较结果;
S103、根据比较结果确定内存空间是否释放。
需要说明的是,在S101中,所述的第一地址集合为应用程序在申请内存时,由内存申请函数生成的地址。相对应地,第二地址集合为应用程序在释放内存时,由内存释放函数生成的地址。
还需要说明的是,在S102中,第一地址集合为内存申请函数在申请内存时所生成的地址,而第二地址集合为内存释放函数在申请内存时所生成的地址,为了保证在应用程序结束运行时能够释放掉所申请的内存空间,将第一地址集合与第二地址集合进行比较。通过将第一地址集合与第二地址集合进行比较可以得到第一地址集合与第二地址集合的比较结果,这个比较结果表征了第一地址集合与第二地址集合中的地址的匹配程度。
可以理解地,在S103中,根据比较结果可以确定第一地址集合与第二地址集合的匹配程度,根据匹配程度可以确定所申请的内存空间是否都已经释放。
具体地,参见图4,步骤S103包括S1031和S1032:
S1031、当比较结果表征第一地址集合与第二地址集合中的地址能够匹配时,确定内存空间已经释放;
S1032、当比较结果表征第一地址集合与第二地址集合中的地址不能够匹配时,确定内存空间未释放。
具体地,将第一地址集合中的地址与第二地址集合中的地址一一进行匹配,若第一地址集合中的地址与第二地址集合中的地址相同,或者第一地址集合中的地址与第二地址集合中的地址相对应,则说明第一地址集合中的地址与第二地址集合中的地址相匹配。此时,能够确定在应用程序停止运行时所占用的内存空间已经被释放。
相反地,将第一地址集合中的地址与第二地址集合中的地址一一进行匹配,若第一地址集合中的地址与第二地址集合中的地址不相同,或者第一地址集合中的地址与第二地址集合中的地址不相对应,则说明第一地址集合中的地址与第二地址集合中的地址不相匹配。此时,能够确定在应用程序停止运行时所占用的内存空间尚未被释放。
参见图5,内存空间未释放时,在终端显示屏上显示该应用程序对应的内存空间未释放的提示信息。通过提示信息提示用户可以对终端当前的内存占用情况进行扫描,确认所开启的应用程序在停止运行后是否将所占用的内存空间均进行了释放。若检测到有内存空间未释放,用户可以通过手动点击对尚未释放的内存空间进行释放。
在上述方案中,所述方法还包括:
当确定内存空间未释放时,将未释放的内存空间进行释放。
可以理解地,在内存空间未释放时,终端对内存空间进行释放,清空尚未释放的内存供其他应用程序使用。
参见图6,在对应用程序所占用的内存空间进行释放时,在终端的显示屏上提示“正在对该应用程序的内存空间进行释放”,并显示相应的内存释放进度条。当进度条显示内存空间已经释放100%时,表明应用程序所占用的内存空间已经全部得到释放。
在上述方案中,在所述获取应用程序所对应的内存申请函数的第一地址集合和应用程序所对应的内存释放函数的第二地址集合之前,所述方法还包括:
当应用程序启动时,生成与应用程序相对应的线程;
以及,通过内存申请函数为所生成的线程申请内存空间;
以及,当应用程序结束运行时,通过内存释放函数为所生成的线程释放内存空间。
需要说明的是,应用启动时会产生多个线程,每个线程都需要占用一定的内存资源,因此需要为所生成的线程申请内存空间。通过内存申请函数为所生成的线程申请内存空间,在应用程序结束运行时,需要利用内存释放函数对内存空间进行释放。若不对应用程序所占用的内存及时进行释放,会造成系统内存的浪费,导致程序运行速度减慢。
具体地,内存申请函数在内存中寻找到一片跟线程运行所需内存空间对应大小的内存空间,然后将这个内存空间的首地址范围给一个指针变量,内存申请函数为应用函数分配的内存空间在逻辑上是连续的,而在物理上可以是连续的也可以是不连续的。内存释放函数将已分配的内存区域释放,所释放的内存空间为指针指定的内存空间。
参见图7,图7示出了启动应用程序时的显示界面。用户通过点击相对应的应用程序图标就可以启动应用程序。参见图8,图8示出了结束应用程序时的显示界面。当用户通过点击退出应用程序时,应用程序结束运行。
这里,用户启动了一个自拍应用程序,在启动自拍应用程序时会生成与自拍应用程序相关的线程,与自拍应用程序相关的线程需要占用一定的内存空间,因此,通过内存申请函数为自拍应用程序所生成的线程申请内存空间。
在退出自拍应用程序时,通过点击自拍界面上的退出按钮退出自拍应用程序。此时,终端需要将启动自拍应用程序时所申请的内存空间进行释放,否则会引起内存泄露的问题。终端通过内存释放函数将自拍应用程序所占用的内存空间进行释放。
在内存释放时,通过内存释放函数可以完成内存释放,内存释放函数按照地址对内存申请函数所申请的内存空间一一进行释放。
在上述方案中,所述方法具体还包括:
在内存申请函数和内存释放函数中注入HOOK函数;所述HOOK函数为钩子函数,用于记录内存申请函数所对应的第一地址集合与内存释放函数所对应的第二地址集合。
在上述方案中,所述在内存申请函数和内存释放函数中注入HOOK函数,包括:
在内存申请函数中注入第一HOOK函数;所述第一HOOK函数用于记录内存申请函数所对应的第一地址集合;
在内存释放函数中注入第二HOOK函数;所述第二HOOK函数用于记录内存释放函数所对应的第二地址集合。
需要说明的是,HOOK函数为钩子函数,通过HOOK函数可以捕捉进程或其他进程发生的事件。在本发明实施例中HOOK函数实现记录功能,用于记录内存申请函数所对应的第一地址集合与内存释放函数所对应的第二地址集合。通过内存申请函数为应用程序申请了一段内存空间,该内存空间是有地址的,在释放时,需要确定每一个地址是否都已经被释放。
具体地,分别采用两个HOOK函数分别记录内存申请函数的第一地址集合与内存释放函数的第二地址集合。将第一HOOK函数标记为HOOK1,将第二HOOK函数标记为HOOK2,其中,第一HOOK函数记录内存申请函数所对应的第一地址集合,第二HOOK函数记录内存释放函数所对应的第二地址集合。第一地址集合中的地址为申请的内存空间所在的地址,第二地址集合中的地址为释放内存空间的地址。
在上述方案中,所述将第一地址集合与第二地址集合进行比较,包括:
调用第一HOOK函数中记录的第一地址集合和第二HOOK函数中记录的第二地址集合;
将第一地址集合中的每一条地址信息与第二地址集合中的每一条地址信息逐一进行比较。
具体地,所述方法还包括:
获取第二地址集合中不能与第一地址集合相匹配的地址信息;其中,所述第二地址集合中不能与第一地址集合相匹配的地址信息所对应的内存空间为未释放的内存空间。
这里,通过上述方法获得未释放的内存空间后,需要根据第二地址集合中不能与第一地址集合相匹配的地址信息对相对应的内存空间进行释放。
相对应地,第二地址集合中能够与第一地址集合相匹配的地址信息所对应的内存空间为已经释放的内存空间。因此,无需对这一部分已经释放的内存空间再次进行释放。
下面结合图9具体说明通过将第一地址集合与第二地址集合进行比较,来判断内存空间是否已经释放的过程:
参见图9,HOOK1记录了应用程序所占用的所有地址,这些地址组合成第一地址集合,HOOK2记录了应用程序释放的所有地址,这些地址组合成第二地址集合。在应用程序停止运行时,调用内存申请函数的第一地址集合与调用释放函数的第二地址集合,将第一地址集合与第二地址集合中的地址逐一进行比较,若第一地址集合中的地址与第二地址集合中的地址相同或相匹配则说明该应用程序所占用的内存已经释放。
图9(a)示出了第一地址集合中的地址与第二地址集合中的地址相同的情况,由图9(a)可以看出HOOK1所对应的地址为“地址1~地址8”,HOOK2所对应的地址也为“地址1~地址8”。由于第一地址集合与第二地址集合中的所有地址均相同,因此,确定该应用程序所占用的内存空间已经得到释放。相对应地,图9(b)示出了第一地址集合中的地址与第二地址集合中的地址相对应的情况,由图9(b)可以看出HOOK1所对应的地址为“地址a~地址h”,HOOK2所对应的地址也为“地址A~地址H”。由于第一地址集合与第二地址集合中的所有地址均相对应,因此,确定该应用程序所占用的内存空间已经得到释放。
本发明实施例所提供的一种内存检测方法,通过对内存申请函数的第一地址集合和内存释放函数的第二地址集合进行比较,获取比较结果,然后根据比较结果判断内存空间是否已经释放,实现了对未释放的内存空间及时进行释放,避免了内存空间的浪费。
实施例二
基于前述实施例相同的技术构思,参见图10,其示出了本发明实施例提供的一种内存检测方法的具体实现流程,该流程可以包括:
S201、当应用程序启动时,生成与应用程序相对应的线程。
需要说明的是,应用程序启动时,会生成相应的线程。在一个应用程序中至少运行一个线程,通过多个线程分别完成不同的工作是的应用程序能够正常运行。
S202、通过内存申请函数为所生成的线程申请内存空间。
需要说明的是,由于线程需要占用内存空间,因此,通过内存申请函数为应用程序所生成的线程申请内存空间以便线程能够正常运行。
S203、在内存申请函数中注入第一HOOK函数;所述第一HOOK函数用于记录内存申请函数所对应的第一地址集合。
需要说明的是,内存申请函数在申请内存空间时,在内存空间对应着一段相应的地址,通过第一HOOK函数记录内存申请函数的第一地址集合。
S204、当应用程序结束运行时,通过内存释放函数为所生成的线程释放内存空间。
需要说明的是,当应用程序结束运行时,需要将内存空间进行释放,此时,通过内存释放函数将所生成的线程所占用的内存空间进行释放。
S205、在内存释放函数中注入第二HOOK函数;所述第二HOOK函数用于记录内存释放函数所对应的第二地址集合。
需要说明的是,内存释放函数在释放内存空间时,需要根据所占用的内存空间对应的地址对内存空间进行释放,通过第二HOOK函数记录内存释放函数的第二地址集合。在内存空间正常释放的情况下,第二HOOK函数所记录的第二地址集合与第一HOOK函数所记录的第一地址集合能够相匹配。
S206、获取第一地址集合和第二地址集合。
S207、将第一地址集合与第二地址集合进行比较,判断第一地址集合与第二地址集合中的地址是否能够匹配;当第一地址集合与第二地址集合中的地址能够匹配时,执行S208;当第一地址集合与第二地址集合中的地址不能够匹配时,执行S209。
S208、当第一地址集合与第二地址集合中的地址能够匹配时,确定内存空间已经释放。
需要说明的是,当第一地址集合与第二地址集合中的地址能够匹配时,说明内存释放函数已经按照地址将应用程序所占用的所有内存空间进行释放,此时,应用程序启动时所申请的内存空间已经全部得到释放。
S209、当第一地址集合与第二地址集合中的地址不能够匹配时,确定内存空间未释放。
需要说明的是,当第一地址集合与第二地址集合中的地址不能够匹配时,说明内存释放函数未能按照地址将应用程序所占用的所有内存空间进行释放,此时,应用程序启动时所申请的内存空间未能全部得到释放,需要对尚未得到释放的内存空间进行释放。
S210、当确定内存空间未释放时,将未释放的内存空间进行释放。
需要说明的是,根据第一地址集合与第二地址集合中不能相匹配的地址进行寻址,将不能匹配的地址所对应的内存空间进行释放。此时,应用程序所占用的所有内存空间都释放完毕。
本发明实施例所提供的一种内存检测方法,通过对内存申请函数的第一地址集合和内存释放函数的第二地址集合进行比较,获取比较结果,然后根据比较结果判断内存空间是否已经释放,实现了对未释放的内存空间及时进行释放,避免了内存空间的浪费。
实施例三
基于前述实施例相同的技术构思,参见图11,其示出了本发明实施例提供的一种内存检测设备11,所述内存检测设备11可以包括:处理器1101、存储器1102及内存1103;其中,
所述内存1103,配置为应用程序提供内存空间;
所述存储器1102,配置为存储内存检测程序;
所述处理器1101,配置为执行存储器1102中存储的内存检测程序,以实现以下步骤:
获取应用程序所对应的内存申请函数的第一地址集合和所述应用程序所对应的内存释放函数的第二地址集合;
将所述第一地址集合与所述第二地址集合进行比较,获取比较结果;
根据所述比较结果确定内存空间是否释放。
在实际应用中,上述存储器1102可以是易失性存储器(volatile memory),例如随机存取存储器(RAM,Random-Access Memory);或者非易失性存储器(non-volatilememory),例如只读存储器(ROM,Read-Only Memory),快闪存储器(flash memory),硬盘(HDD,Hard Disk Drive)或固态硬盘(SSD,Solid-State Drive);或者上述种类的存储器的组合,并向处理器1101提供指令和数据。
上述处理器1101可以为特定用途集成电路(ASIC,Application SpecificIntegrated Circuit)、DSP、数字信号处理装置(DSPD,Digital Signal ProcessingDevice)、可编程逻辑装置(PLD,Programmable Logic Device)、FPGA、CPU、控制器、微控制器、微处理器中的至少一种。可以理解地,对于不同的设备,用于实现上述处理器功能的电子器件还可以为其它,本发明实施例不作具体限定。
优选地,所述处理器1101,具体可以用于:
当所述比较结果表征所述第一地址集合与所述第二地址集合中的地址能够匹配时,确定所述内存空间已经释放;
当所述比较结果表征所述第一地址集合与所述第二地址集合中的地址不能够匹配时,确定所述内存空间未释放。
优选地,所述处理器1101,具体可以用于:
当确定所述内存空间未释放时,将未释放的内存空间进行释放。
优选地,所述处理器1101,具体可以用于:
当所述应用程序启动时,生成与所述应用程序相对应的线程;
通过所述内存申请函数为所生成的线程申请内存空间;
当所述应用程序结束运行时,通过所述内存释放函数为所生成的线程释放内存空间。
优选地,所述处理器1101,具体可以用于:
在所述内存申请函数和所述内存释放函数中注入HOOK函数;所述HOOK函数为钩子函数,用于记录所述内存申请函数所对应的第一地址集合与所述内存释放函数所对应的第二地址集合。
优选地,所述处理器1101,具体可以用于:
在所述内存申请函数中注入第一HOOK函数;所述第一HOOK函数用于记录所述内存申请函数所对应的第一地址集合;
在所述内存释放函数中注入第二HOOK函数;所述第二HOOK函数用于记录所述内存释放函数所对应的第二地址集合。
优选地,所述处理器1101,具体可以用于:
调用所述第一HOOK函数中记录的第一地址集合和所述第二HOOK函数中记录的第二地址集合;
将所述第一地址集合中的每一条地址信息与所述第二地址集合中的每一条地址信息逐一进行比较。
优选地,所述处理器1101,具体可以用于:
获取所述第二地址集合中不能与所述第一地址集合相匹配的地址信息;其中,所述第二地址集合中不能与所述第一地址集合相匹配的地址信息所对应的内存空间为未释放的内存空间。
本发明实施例所提供的一种内存检测设备,通过对内存申请函数的第一地址集合和内存释放函数的第二地址集合进行比较,获取比较结果,然后根据比较结果判断内存空间是否已经释放,实现了对未释放的内存空间及时进行释放,避免了内存空间的浪费。
实施例四
本发明实施例还提供一种计算机可读存储介质,本实施例中的一种内存检测方法对应的计算机程序指令可以被存储在光盘,硬盘,U盘等存储介质上,当存储介质中的与一种内存检测方法对应的计算机程序指令被一电子设备读取或被执行时,包括如下步骤:
获取应用程序所对应的内存申请函数的第一地址集合和所述应用程序所对应的内存释放函数的第二地址集合;
将所述第一地址集合与所述第二地址集合进行比较,获取比较结果;
根据所述比较结果确定内存空间是否释放。
可选的,存储介质中存储的与步骤:所述根据所述比较结果确定内存空间是否释放,包括:
当所述比较结果表征所述第一地址集合与所述第二地址集合中的地址能够匹配时,确定所述内存空间已经释放;
当所述比较结果表征所述第一地址集合与所述第二地址集合中的地址不能够匹配时,确定所述内存空间未释放。
可选的,存储介质中存储的与步骤还包括:
当确定所述内存空间未释放时,将未释放的内存空间进行释放。
可选的,存储介质中存储的与步骤:在所述获取应用程序所对应的内存申请函数的第一地址集合和所述应用程序所对应的内存释放函数的第二地址集合之前,所述方法还包括:
当所述应用程序启动时,生成与所述应用程序相对应的线程;
通过所述内存申请函数为所生成的线程申请内存空间;
当所述应用程序结束运行时,通过所述内存释放函数为所生成的线程释放内存空间。
可选的,存储介质中存储的与步骤还包括:
在所述内存申请函数和所述内存释放函数中注入HOOK函数;所述HOOK函数为钩子函数,用于记录所述内存申请函数所对应的第一地址集合与所述内存释放函数所对应的第二地址集合。
可选的,存储介质中存储的与步骤:所述在所述内存申请函数和所述内存释放函数中注入HOOK函数,包括:
在所述内存申请函数中注入第一HOOK函数;所述第一HOOK函数用于记录所述内存申请函数所对应的第一地址集合;
在所述内存释放函数中注入第二HOOK函数;所述第二HOOK函数用于记录所述内存释放函数所对应的第二地址集合。
可选的,存储介质中存储的与步骤:所述将所述第一地址集合与所述第二地址集合进行比较,包括:
调用所述第一HOOK函数中记录的第一地址集合和所述第二HOOK函数中记录的第二地址集合;
将所述第一地址集合中的每一条地址信息与所述第二地址集合中的每一条地址信息逐一进行比较。
可选的,存储介质中存储的与步骤还包括:
获取所述第二地址集合中不能与所述第一地址集合相匹配的地址信息;其中,所述第二地址集合中不能与所述第一地址集合相匹配的地址信息所对应的内存空间为未释放的内存空间。
本发明实施例所提供的一种计算机存储介质,通过对内存申请函数的第一地址集合和内存释放函数的第二地址集合进行比较,获取比较结果,然后根据比较结果判断内存空间是否已经释放,实现了对未释放的内存空间及时进行释放,避免了内存空间的浪费。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,这些均属于本发明的保护之内。

Claims (10)

1.一种内存检测方法,其特征在于,所述方法应用于终端,所述方法包括:
获取应用程序所对应的内存申请函数的第一地址集合和所述应用程序所对应的内存释放函数的第二地址集合;
将所述第一地址集合与所述第二地址集合进行比较,获取比较结果;
根据所述比较结果确定内存空间是否释放。
2.根据权利要求1所述的方法,其特征在于,所述根据所述比较结果确定内存空间是否释放,包括:
当所述比较结果表征所述第一地址集合与所述第二地址集合中的地址能够匹配时,确定所述内存空间已经释放;
当所述比较结果表征所述第一地址集合与所述第二地址集合中的地址不能够匹配时,确定所述内存空间未释放。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
当确定所述内存空间未释放时,将未释放的内存空间进行释放。
4.根据权利要求1所述的方法,其特征在于,在所述获取应用程序所对应的内存申请函数的第一地址集合和所述应用程序所对应的内存释放函数的第二地址集合之前,所述方法还包括:
当所述应用程序启动时,生成与所述应用程序相对应的线程;
通过所述内存申请函数为所生成的线程申请内存空间;
当所述应用程序结束运行时,通过所述内存释放函数为所生成的线程释放内存空间。
5.根据权利要求1或4所述的方法,其特征在于,所述方法还包括:
在所述内存申请函数和所述内存释放函数中注入HOOK函数;所述HOOK函数为钩子函数,用于记录所述内存申请函数所对应的第一地址集合与所述内存释放函数所对应的第二地址集合。
6.根据权利要求5所述的方法,其特征在于,所述在所述内存申请函数和所述内存释放函数中注入HOOK函数,包括:
在所述内存申请函数中注入第一HOOK函数;所述第一HOOK函数用于记录所述内存申请函数所对应的第一地址集合;
在所述内存释放函数中注入第二HOOK函数;所述第二HOOK函数用于记录所述内存释放函数所对应的第二地址集合。
7.根据权利要求6所述的方法,其特征在于,所述将所述第一地址集合与所述第二地址集合进行比较,包括:
调用所述第一HOOK函数中记录的第一地址集合和所述第二HOOK函数中记录的第二地址集合;
将所述第一地址集合中的每一条地址信息与所述第二地址集合中的每一条地址信息逐一进行比较。
8.根据权利要求7所述的方法,其特征在于,所述方法还包括:
获取所述第二地址集合中不能与所述第一地址集合相匹配的地址信息;其中,所述第二地址集合中不能与所述第一地址集合相匹配的地址信息所对应的内存空间为未释放的内存空间。
9.一种内存检测设备,其特征在于,所述设备包括处理器、存储器及内存;
所述内存,配置为应用程序提供内存空间;
所述存储器,配置为存储内存检测程序;
所述处理器,配置为执行存储器中存储的内存检测程序,以实现以下步骤:
获取应用程序所对应的内存申请函数的第一地址集合和所述应用程序所对应的内存释放函数的第二地址集合;
将所述第一地址集合与所述第二地址集合进行比较,获取比较结果;
根据所述比较结果确定内存空间是否释放。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有内存检测程序,所述内存检测程序被处理器执行时实现如权利要求1至8中任一项所述的内存检测方法的步骤。
CN201710702349.3A 2017-08-16 2017-08-16 一种内存检测方法、设备及计算机存储介质 Pending CN107562586A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710702349.3A CN107562586A (zh) 2017-08-16 2017-08-16 一种内存检测方法、设备及计算机存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710702349.3A CN107562586A (zh) 2017-08-16 2017-08-16 一种内存检测方法、设备及计算机存储介质

Publications (1)

Publication Number Publication Date
CN107562586A true CN107562586A (zh) 2018-01-09

Family

ID=60974604

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710702349.3A Pending CN107562586A (zh) 2017-08-16 2017-08-16 一种内存检测方法、设备及计算机存储介质

Country Status (1)

Country Link
CN (1) CN107562586A (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110083525A (zh) * 2019-03-15 2019-08-02 平安普惠企业管理有限公司 内存泄露的定位方法、装置、计算机设备及存储介质
CN111258752A (zh) * 2020-01-08 2020-06-09 广州虎牙科技有限公司 资源监控方法、装置、电子设备及存储介质
CN111309538A (zh) * 2020-02-27 2020-06-19 腾讯科技(成都)有限公司 内存检查方法、装置、电子设备及存储介质
CN112084024A (zh) * 2020-08-31 2020-12-15 北京字节跳动网络技术有限公司 一种内存监控方法、装置、介质和电子设备
CN112416574A (zh) * 2020-10-30 2021-02-26 北京小米移动软件有限公司 一种确定应用占用内存的方法、装置及存储介质
CN112463544A (zh) * 2020-12-17 2021-03-09 深圳软牛科技有限公司 程序的运行监控方法、装置、设备及存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101539870A (zh) * 2008-03-21 2009-09-23 中兴通讯股份有限公司 内存泄漏检测装置及方法
CN103294588A (zh) * 2012-02-22 2013-09-11 深圳富泰宏精密工业有限公司 内存检测系统及方法
CN106610892A (zh) * 2015-10-23 2017-05-03 腾讯科技(深圳)有限公司 内存泄漏检测方法和装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101539870A (zh) * 2008-03-21 2009-09-23 中兴通讯股份有限公司 内存泄漏检测装置及方法
CN103294588A (zh) * 2012-02-22 2013-09-11 深圳富泰宏精密工业有限公司 内存检测系统及方法
CN106610892A (zh) * 2015-10-23 2017-05-03 腾讯科技(深圳)有限公司 内存泄漏检测方法和装置

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110083525A (zh) * 2019-03-15 2019-08-02 平安普惠企业管理有限公司 内存泄露的定位方法、装置、计算机设备及存储介质
CN111258752A (zh) * 2020-01-08 2020-06-09 广州虎牙科技有限公司 资源监控方法、装置、电子设备及存储介质
CN111309538A (zh) * 2020-02-27 2020-06-19 腾讯科技(成都)有限公司 内存检查方法、装置、电子设备及存储介质
CN111309538B (zh) * 2020-02-27 2023-03-21 腾讯科技(成都)有限公司 内存检查方法、装置、电子设备及存储介质
CN112084024A (zh) * 2020-08-31 2020-12-15 北京字节跳动网络技术有限公司 一种内存监控方法、装置、介质和电子设备
CN112084024B (zh) * 2020-08-31 2024-02-02 北京字节跳动网络技术有限公司 一种内存监控方法、装置、介质和电子设备
CN112416574A (zh) * 2020-10-30 2021-02-26 北京小米移动软件有限公司 一种确定应用占用内存的方法、装置及存储介质
CN112463544A (zh) * 2020-12-17 2021-03-09 深圳软牛科技有限公司 程序的运行监控方法、装置、设备及存储介质
CN112463544B (zh) * 2020-12-17 2023-05-02 深圳软牛科技有限公司 程序的运行监控方法、装置、设备及存储介质

Similar Documents

Publication Publication Date Title
CN107027114A (zh) 一种sim卡切换方法、设备及计算机可读存储介质
CN107562586A (zh) 一种内存检测方法、设备及计算机存储介质
CN110187808B (zh) 动态壁纸设置方法、装置及计算机可读存储介质
CN107862217B (zh) 一种位置信息获取方法、移动终端以及计算机存储介质
CN108121681B (zh) 一种热插拔实现方法、终端及存储介质
CN107832032B (zh) 锁屏显示方法及移动终端
CN107172605B (zh) 一种紧急呼叫方法、移动终端及计算机可读存储介质
CN109766119B (zh) 恢复分区升级方法、终端和计算机可读存储介质
CN108307030A (zh) 一种sim卡管理方法、设备及计算机可读存储介质
CN109375846B (zh) 呼吸图标的显示方法及装置、移动终端及可读存储介质
CN108536383B (zh) 一种游戏控制方法、设备及计算机可读存储介质
CN107194217B (zh) 用户数据访问控制方法、设备和计算机可读存储介质
CN109151216B (zh) 应用启动方法、移动终端、服务器及计算机可读存储介质
CN109309762B (zh) 消息处理方法、装置、移动终端以及存储介质
CN110955397A (zh) 游戏终端帧率的设置方法、游戏终端及存储介质
CN107678622B (zh) 一种应用图标的显示方法、终端及存储介质
CN112423211A (zh) 一种多音频传输控制方法、设备及计算机可读存储介质
CN109683796B (zh) 一种交互控制方法、设备及计算机可读存储介质
CN109062688B (zh) 一种内存分配方法、服务器及移动终端
CN108183833B (zh) 一种响应处理方法、装置及计算机可读存储介质
CN108037959B (zh) 接口智能合并方法、移动终端及计算机可读存储介质
CN107562304B (zh) 一种控制方法、移动终端和计算机可读存储介质
CN107580106B (zh) 一种通话控制方法、移动终端和计算机可读存储介质
CN107404568B (zh) 一种控制开关管理方法及移动终端
CN110399083B (zh) 游戏空间启动方法、终端以及计算机可读存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication

Application publication date: 20180109

RJ01 Rejection of invention patent application after publication