APP下载

C/C++程序内存泄漏检测算法的研究

2021-05-16仵俊

现代信息科技 2021年22期
关键词:程序

摘  要:为了获得最佳性能,C/C++语言把操纵内存的权限以指针的方式暴露给开发人员。但是C/C++语言编译器GCC和Clang都不提供内存安全检测,导致开发人员使用C/C++语言编写的项目可能存在内存泄漏的风险。文章介绍了改进指针算法和shared_ptr源码,分析了它们检测内存泄漏的方式,最后指出该类算法的缺陷,提出改进思路,并建议用户避免写出该类算法无法检测的代码结构。

关键词:C/C++程序;内存泄漏;改进指针算法;shared_ptr

中图分类号:TP311     文献标识码:A文章编号:2096-4706(2021)22-0098-03

Abstract: In order to obtain the best performance, C/C++ language exposes the permission to manipulate memory to developers in the form of pointers. However, the C/C++ language compiler GCC and Clang do not provide memory security detection, which leads to the risk of memory leakage for projects written by developers in C/C++ language. This paper introduces the improved pointer algorithm and shared_ptr source code, analyzes their ways to detect memory leakage, finally points out the defects of this kind of algorithm and puts forward improvement ideas, and advises users to avoid writing code structures that cannot be detected by such algorithms.

Keywords: C/C++ program; memory leak; improved pointer algorithm; shared_ ptr

0  引  言

随着使用C/C++语言所构建项目规模的不断增大,内存安全也越来越受重视。内存泄漏往往在程序运行中就发生,不易被发现和修改。相较于其他运行于虚拟机上的语言(如Python和Java),C/C++为了实现对内存的细粒度的操作,没有设计垃圾收集器。因此,使用C/C++编写项目时,开发人员需要格外注意内存的申请和释放。本文介绍了改进指针算法[1-3]和shared_ptr[4,5]源码,分析了它们对内存泄漏的检测方式,并指出它们所存在的不足。希望读者可以通过改进指针算法或share_ptr来规避内存泄漏,尽量不要写出连检测算法也无法处理的代码结构。

1  内存泄漏检测原理分析

1.1  改进指针算法

改进指針算法是一种新的内存安全性动态分析方法,采用源码插桩技术实现,支持复杂的动态内存检查。改进指针方法的最大创新点是分别为每一个内存对象和指针创建和维护一个状态节点数据(status node data, snd)和指针元数据(pointer matedata, pmd)。该方法不仅可以在程序运行时记录每个指针指向内存对象的边界信息,还可以记录内存对象所对应snd的状态和计数信息。……

登录APP查看全文

猜你喜欢

程序
给Windows添加程序快速切换栏
试论我国未决羁押程序的立法完善
失能的信仰——走向衰亡的民事诉讼程序
“程序猿”的生活什么样
英国与欧盟正式启动“离婚”程序程序
基于VMM的程序行为异常检测
侦查实验批准程序初探
我国刑事速裁程序的构建
创卫暗访程序有待改进
恐怖犯罪刑事诉讼程序的完善