[发明专利]一种检测内存泄露的方法及装置在审
申请号: | 202210508567.4 | 申请日: | 2022-05-11 |
公开(公告)号: | CN114880226A | 公开(公告)日: | 2022-08-09 |
发明(设计)人: | 刘小兵 | 申请(专利权)人: | 北京京东拓先科技有限公司 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 中原信达知识产权代理有限责任公司 11219 | 代理人: | 孙磊;韩黎捷 |
地址: | 100176 北京市北京经济技*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 检测 内存 泄露 方法 装置 | ||
1.一种检测内存泄露的方法,其特征在于,包括:
获取待检测的内存区域的指针地址;
根据所述指针地址确定所述内存区域对应的多个内存对象;
确定所述多个内存对象之间的引用关系;
根据所述引用关系,检测所述多个内存对象之间是否存在循环引用;
如果是,确定所述内存区域存在内存泄露。
2.根据权利要求1所述的方法,其特征在于,所述根据所述引用关系,检测所述多个内存对象之间是否存在循环引用,包括:
根据所述引用关系,构建所述多个内存对象对应的有向图;
确定每一个所述内存对象在所述有向图中的入度和/或出度;
根据所述入度和/或出度,检测所述多个内存对象之间是否存在循环引用。
3.根据权利要求2所述的方法,其特征在于,所述根据所述入度和/或出度,检测所述多个内存对象之间是否存在循环引用,包括:
根据所述有向图,确定所述内存对象对应的一个或多个被引用对象;
循环执行以下步骤,直至不存在入度为零的目标内存对象:
从所述有向图中删除当前入度为零的目标内存对象;
针对删除后剩余的每一个所述内存对象:确定对应的所述一个或多个被引用对象中是否存在所述目标内存对象,如果是,删除所述目标内存对象;
重新确定所述内存对象的当前入度;
和/或,
根据所述有向图,确定所述内存对象对应的一个或多个引用对象;
循环执行以下步骤,直至不存在出度为零的目标内存对象:
从所述有向图中删除当前出度为零的目标内存对象;
针对删除后剩余的每一个所述内存对象:确定对应的所述一个或多个引用对象中是否存在所述目标内存对象,如果是,删除所述目标内存对象;
重新确定所述内存对象的当前出度。
4.根据权利要求3所述的方法,其特征在于,
根据循环结果确定剩余的内存对象;
根据所述剩余的内存对象的引用关系,确定所述剩余的内存对象是否构成闭环有向图,如果是,确定存在循环引用。
5.根据权利要求3所述的方法,其特征在于,
通过数组结构记录所述内存对象对应的一个或多个被引用对象和/或一个或多个引用对象;
所述删除所述目标内存对象,包括;
从所述内存对象对应的被引用数组或引用数组中,删除所述目标内存对象。
6.根据权利要求2所述的方法,其特征在于,还包括:
通过邻接矩阵记录所述引用关系。
7.根据权利要求1所述的方法,其特征在于,所述根据所述指针地址确定所述内存区域对应的多个内存对象,包括:
根据所述指针地址的类型,从所述指针地址中确定标记指针;
过滤所述标记指针,并根据过滤结果确定所述多个内存对象。
8.根据权利要求1所述的方法,其特征在于,所述根据所述指针地址确定所述内存区域对应的多个内存对象,包括:
根据所述指针地址确定所述内存区域的分区结构体;
根据所述分区结构体中的目标指针,确定所述内存区域对应的枚举器;
利用所述枚举器确定所述内存区域对应的多个内存对象。
9.一种检测内存泄露的装置,其特征在于,包括:地址获取模块、确定模块和检测模块;其中,
所述地址获取模块,用于获取待检测的内存区域的指针地址;
所述确定模块,用于根据所述指针地址确定所述内存区域对应的多个内存对象,并确定所述多个内存对象之间的引用关系;
所述检测模块,用于根据所述引用关系,检测所述多个内存对象之间是否存在循环引用;如果是,确定所述内存区域存在内存泄露。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京京东拓先科技有限公司,未经北京京东拓先科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202210508567.4/1.html,转载请声明来源钻瓜专利网。