CN105243011A - 内存泄露定位方法及装置 - Google Patents
内存泄露定位方法及装置 Download PDFInfo
- Publication number
- CN105243011A CN105243011A CN201510571947.2A CN201510571947A CN105243011A CN 105243011 A CN105243011 A CN 105243011A CN 201510571947 A CN201510571947 A CN 201510571947A CN 105243011 A CN105243011 A CN 105243011A
- Authority
- CN
- China
- Prior art keywords
- memory
- file
- instruction
- data structure
- line number
- 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
Links
Landscapes
- Storage Device Security (AREA)
Abstract
本发明提供一种内存泄露定位方法及装置。该方法,包括:获取文件信息和内存地址信息,所述文件信息包括触发分配内存的文件名称和文件行号,所述内存地址信息包括指向所分配内存的指针值信息,所述分配内存包括为所述文件行号指示的文件所分配的内存,所述文件行号为所述文件名称指示的文件的行号;将所述文件信息和所述内存地址信息存储在数据结构中,用于在发生内存泄漏时确定内存泄漏的位置。实现了对分配内存的定位,从而可以在发生内存泄漏时,根据分配内存的定位信息,确定内存泄漏的位置。
Description
技术领域
本发明涉及计算机领域,尤其涉及一种内存泄露定位方法及装置。
背景技术
系统在程序运行的过程中,可能发生频繁死机或无法正常工作的现象,即系统崩溃。
导致系统崩溃的原因很多,比如,系统中存在病毒,或者,运行的程序中存在漏洞(bug),或者,内存泄漏等。其中,内存泄露是指在程序运行时,系统不断的为正在运行的程序分配内存,并将指向内存的指针保存在一个数据存储中,直到程序退出时,才依次释放指针所指向的内存块,该指针为存储在数据存储中的指针。
然而在发生内存泄漏的场景下,本领域技术人员无法定位内存泄漏的具体位置。
发明内容
本发明提供一种内存泄漏定位方法及装置,用以解决无法定位内存泄漏的具体位置的问题。
本发明的第一个方面是提供一种内存泄露定位方法,包括:
获取文件信息和内存地址信息,所述文件信息包括触发分配内存的文件名称和文件行号,所述内存地址信息包括指向所分配内存的指针值信息,所述分配内存包括为所述文件行号指示的文件所分配的内存,所述文件行号为所述文件名称指示的文件的行号;
将所述文件信息和所述内存地址信息存储在数据结构中,用于在发生内存泄漏时确定内存泄漏的位置。
进一步的,所述将所述文件信息和所述内存地址信息存储在数据结构中,用于确定为文件行号分配的内存信息,包括:
将所述内存地址信息存储在数据结构的键key值;
将所述文件信息存储在所述数据结构的数据value值。
进一步的,还包括:
获取删除指令,所述删除指令包括指示删除第一数据项;
根据所述删除指令,删除所述数据结构中的所述第一数据项;
根据所述删除指令,释放所述第一数据项指示的内存。
进一步的,还包括:
确定程序退出;
确定所述数据结构当前存储的剩余数据项;
释放所述剩余数据项指示的内存。
进一步的,所述数据结构为map数据结构。
本发明的第二个方面是提供一种内存泄漏定位装置,包括:
获取模块,用于获取文件信息和内存地址信息,所述文件信息包括触发分配内存的文件名称和文件行号,所述内存地址信息包括指向所分配内存的指针值信息,所述分配内存包括为所述文件行号指示的文件所分配的内存,所述文件行号为所述文件名称指示的文件的行号;
存储模块,用于将所述文件信息和所述内存地址信息存储在数据结构中,用于在发生内存泄漏时确定内存泄漏的位置。
进一步的,所述存储模块,具体用于将所述内存地址信息存储在数据结构的键key值;将所述文件信息存储在所述数据结构的数据value值。
进一步的,所述获取模块,还用于获取删除指令,所述删除指令包括指示删除第一数据项;根据所述删除指令,删除所述数据结构中的所述第一数据项;根据所述删除指令,释放所述第一数据项指示的内存。
进一步的,还包括:确定模块;
所述确定模块,用于确定程序退出;确定所述数据结构当前存储的剩余数据项;释放所述剩余数据项指示的内存。
进一步的,所述数据结构为map数据结构。
在本实施例中,获取文件信息和内存地址信息,所述文件信息包括触发分配内存的文件名称和文件行号,所述内存地址信息包括指向所分配内存的指针值信息,所述分配内存包括为所述文件行号指示的文件所分配的内存,所述文件行号为所述文件名称指示的文件的行号;将所述文件信息和所述内存地址信息存储在数据结构中,用于在发生内存泄漏时确定内存泄漏的位置。实现了对分配内存的定位,从而可以在发生内存泄漏时,根据分配内存的定位信息,确定内存泄漏的位置。
附图说明
图1为本发明内存泄露定位方法一实施例的流程示意图;
图2为本发明内存泄露定位装置一实施例的结构示意图;
图3为本发明内存泄露定位装置二实施例的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明内存泄露定位方法一实施例的流程示意图,如图1所示,内存分配的监测方法,包括:
步骤101、获取文件信息和内存地址信息。
在本实施例中,所述文件信息包括触发分配内存的文件名称和文件行号,所述内存地址信息包括指向所分配内存的指针值信息,所述分配内存包括为所述文件行号指示的文件所分配的内存,所述文件行号为所述文件名称指示的文件的行号。
本实施例的适用场景是在分配内存时,例如,在调用申请内存模块(new)函数时。
举例来讲,重载申请内存模块(new)函数,实现对文件信息和内存地址信息的获取,具体的,new(size_tnSizechar*FileNameintLineNum),其中nSize为申请的内存大小,FileName为被调用时所在的文件名,LineNum为调用时所在的文件行号。
步骤102、将所述文件信息和所述内存地址信息存储在数据结构中,用于在发生内存泄漏时确定内存泄漏的位置。
举例来讲,使用预编译宏__FILE__和__LINE__在编译时在指定位置展开为该文件的文件名和该行的行号。
具体的,将所述内存地址信息存储在数据结构的键key值;将所述文件信息存储在所述数据结构的数据value值。
在本实施例中,获取文件信息和内存地址信息,所述文件信息包括触发分配内存的文件名称和文件行号,所述内存地址信息包括指向所分配内存的指针值信息,所述分配内存包括为所述文件行号指示的文件所分配的内存,所述文件行号为所述文件名称指示的文件的行号;将所述文件信息和所述内存地址信息存储在数据结构中,用于在发生内存泄漏时确定内存泄漏的位置。实现了对分配内存的定位,从而可以在发生内存泄漏时,根据分配内存的定位信息,确定内存泄漏的位置。
在上述实施例的基础上,该实施例还可以包括:
获取删除指令,所述删除指令包括指示删除第一数据项;
根据所述删除指令,删除所述数据结构中的所述第一数据项;
根据所述删除指令,释放所述第一数据项指示的内存。
进一步的,在上述实施例的基础上,该实施例还可以包括:
确定程序退出;
确定所述数据结构当前存储的剩余数据项;
释放所述剩余数据项指示的内存。
在本实施例中,该程序可以理解为包括至少一个文件,其中各文件分别有各自的文件名称,每个文件可以有多行信息,每行信息对应不同的行号。
在本实施例中,实现了在程序退出时,释放所有在执行程序时分配的内存,从而避免了内存泄露。
需要说明的是,本实施例中的数据结构可以为map数据结构。
图2为本发明内存泄露定位装置一实施例的结构示意图。如图2所示,该内存泄漏定位装置,包括:获取模块21和存储模块22。其中,
获取模块21,用于获取文件信息和内存地址信息,所述文件信息包括触发分配内存的文件名称和文件行号,所述内存地址信息包括指向所分配内存的指针值信息,所述分配内存包括为所述文件行号指示的文件所分配的内存,所述文件行号为所述文件名称指示的文件的行号;
存储模块22,用于将所述文件信息和所述内存地址信息存储在数据结构中,用于在发生内存泄漏时确定内存泄漏的位置。
在本实施例中,获取文件信息和内存地址信息,所述文件信息包括触发分配内存的文件名称和文件行号,所述内存地址信息包括指向所分配内存的指针值信息,所述分配内存包括为所述文件行号指示的文件所分配的内存,所述文件行号为所述文件名称指示的文件的行号;将所述文件信息和所述内存地址信息存储在数据结构中,用于在发生内存泄漏时确定内存泄漏的位置。实现了对分配内存的定位,从而可以在发生内存泄漏时,根据分配内存的定位信息,确定内存泄漏的位置。
在上述实施例的基础上,所述存储模块22,具体用于将所述内存地址信息存储在数据结构的键key值;将所述文件信息存储在所述数据结构的数据value值。
进一步的,在上述实施例的基础上,所述获取模块21,还用于获取删除指令,所述删除指令包括指示删除第一数据项;根据所述删除指令,删除所述数据结构中的所述第一数据项;根据所述删除指令,释放所述第一数据项指示的内存。
图3为本发明内存泄露定位装置二实施例的结构示意图。如图3所示,该装置,还可以包括:确定模块23;
所述确定模块23,用于确定程序退出;确定所述数据结构当前存储的剩余数据项;释放所述剩余数据项指示的内存。
进一步的,在上述实施例的基础上,所述数据结构为map数据结构。
本实施例中,实现了在程序退出时,释放所有在执行程序时分配的内存,从而避免了内存泄露。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (10)
1.一种内存泄漏定位方法,其特征在于,包括:
获取文件信息和内存地址信息,所述文件信息包括触发分配内存的文件名称和文件行号,所述内存地址信息包括指向所分配内存的指针值信息,所述分配内存包括为所述文件行号指示的文件所分配的内存,所述文件行号为所述文件名称指示的文件的行号;
将所述文件信息和所述内存地址信息存储在数据结构中,用于在发生内存泄漏时确定内存泄漏的位置。
2.根据权利要求1所述的方法,其特征在于,所述将所述文件信息和所述内存地址信息存储在数据结构中,用于确定为文件行号分配的内存信息,包括:
将所述内存地址信息存储在所述数据结构的键key值;
将所述文件信息存储在所述数据结构的数据value值。
3.根据权利要求2所述的方法,其特征在于,还包括:
获取删除指令,所述删除指令包括指示删除第一数据项;
根据所述删除指令,删除所述数据结构中的所述第一数据项;
根据所述删除指令,释放所述第一数据项指示的内存。
4.根据权利要求1-3任一项所述的方法,其特征在于,还包括:
确定程序退出;
确定所述数据结构当前存储的剩余数据项;
释放所述剩余数据项指示的内存。
5.根据权利要求4所述的方法,其特征在于,所述数据结构为map数据结构。
6.一种内存泄漏定位装置,其特征在于,包括:
获取模块,用于获取文件信息和内存地址信息,所述文件信息包括触发分配内存的文件名称和文件行号,所述内存地址信息包括指向所分配内存的指针值信息,所述分配内存包括为所述文件行号指示的文件所分配的内存,所述文件行号为所述文件名称指示的文件的行号;
存储模块,用于将所述文件信息和所述内存地址信息存储在数据结构中,用于在发生内存泄漏时确定内存泄漏的位置。
7.根据权利要求6所述的装置,其特征在于,所述存储模块,具体用于将所述内存地址信息存储在数据结构的键key值;将所述文件信息存储在所述数据结构的数据value值。
8.根据权利要求7所述的装置,其特征在于,所述获取模块,还用于获取删除指令,所述删除指令包括指示删除第一数据项;根据所述删除指令,删除所述数据结构中的所述第一数据项;根据所述删除指令,释放所述第一数据项指示的内存。
9.根据权利要求6-8任一项所述的装置,其特征在于,还包括:确定模块;
所述确定模块,用于确定程序退出;确定所述数据结构当前存储的剩余数据项;释放所述剩余数据项指示的内存。
10.根据权利要求9所述的装置,其特征在于,所述数据结构为map数据结构。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510571947.2A CN105243011A (zh) | 2015-09-09 | 2015-09-09 | 内存泄露定位方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510571947.2A CN105243011A (zh) | 2015-09-09 | 2015-09-09 | 内存泄露定位方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105243011A true CN105243011A (zh) | 2016-01-13 |
Family
ID=55040664
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510571947.2A Pending CN105243011A (zh) | 2015-09-09 | 2015-09-09 | 内存泄露定位方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105243011A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106055478A (zh) * | 2016-05-31 | 2016-10-26 | 腾讯科技(深圳)有限公司 | 检测内存泄漏的方法和装置 |
CN109327530A (zh) * | 2018-10-31 | 2019-02-12 | 网易(杭州)网络有限公司 | 一种信息处理方法、装置、电子设备和存储介质 |
CN112162893A (zh) * | 2020-10-30 | 2021-01-01 | 新华三大数据技术有限公司 | 一种内存泄漏定位方法、装置及电子设备 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103268287A (zh) * | 2013-06-05 | 2013-08-28 | 福州瑞芯微电子有限公司 | 检测内存泄露的方法与装置 |
US20140317129A1 (en) * | 2011-09-02 | 2014-10-23 | Markus T. Metzger | Data race analysis with improved detection filtering |
-
2015
- 2015-09-09 CN CN201510571947.2A patent/CN105243011A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140317129A1 (en) * | 2011-09-02 | 2014-10-23 | Markus T. Metzger | Data race analysis with improved detection filtering |
CN103268287A (zh) * | 2013-06-05 | 2013-08-28 | 福州瑞芯微电子有限公司 | 检测内存泄露的方法与装置 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106055478A (zh) * | 2016-05-31 | 2016-10-26 | 腾讯科技(深圳)有限公司 | 检测内存泄漏的方法和装置 |
CN109327530A (zh) * | 2018-10-31 | 2019-02-12 | 网易(杭州)网络有限公司 | 一种信息处理方法、装置、电子设备和存储介质 |
CN112162893A (zh) * | 2020-10-30 | 2021-01-01 | 新华三大数据技术有限公司 | 一种内存泄漏定位方法、装置及电子设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9355028B2 (en) | Data-storage device and flash memory control method | |
CN102831069B (zh) | 内存处理方法、内存管理设备 | |
US10649672B1 (en) | Offloading device maintenance to an external processor in low-latency, non-volatile memory | |
CN104615594A (zh) | 一种数据更新方法及装置 | |
CN102298543A (zh) | 一种存储器管理方法和装置 | |
CN102033948A (zh) | 一种数据更新方法和装置 | |
CN102971698A (zh) | 快照数据处理方法及系统、存储系统、快照代理 | |
CN105404691A (zh) | 一种文件存储的方法及装置 | |
CN104503703A (zh) | 缓存的处理方法和装置 | |
CN105630779A (zh) | 一种基于分布式文件系统的小文件存储方法和装置 | |
CN105243011A (zh) | 内存泄露定位方法及装置 | |
CN104424240A (zh) | 多表关联方法、主服务节点、计算节点及系统 | |
CN105243003A (zh) | 内存分配的监测方法及装置 | |
CN105808378A (zh) | 元数据修复方法及装置 | |
CN104881241A (zh) | 交换操作的实现方法和装置 | |
CN105677252A (zh) | 读数据的方法、数据处理方法及相关存储设备 | |
CN104407990A (zh) | 一种磁盘访问方法及装置 | |
CN110688065A (zh) | 一种存储空间管理方法、系统、电子设备及存储介质 | |
CN102426601B (zh) | 数据删除方法和装置 | |
CN109445693A (zh) | 一种数据压缩方法和装置 | |
CN103092955B (zh) | 检查点操作方法、装置及系统 | |
CN105094711A (zh) | 一种实现写时复制文件系统的方法及装置 | |
CN109213422B (zh) | 分层存储方法、分层存储装置及计算机可读存储介质 | |
CN107704208B (zh) | 一种元数据的修复方法、装置及介质 | |
CN104252415B (zh) | 一种重新分布数据的方法和系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20160113 |