论文部分内容阅读
内存泄漏是一种常见的内存管理错误,它是由于程序动态分配内存后没有释放而造成的。内存泄漏的错误往往会引起忽视,因为短时间内它并不会暴露出来,但积累到一定的程度它就会导致系统运行效率下降甚至因为内存耗光而崩溃。因此,解决内存泄漏问题成为软件开发中的一个有较高实用价值的研究范畴。本文在对程序分析技术与内存泄漏检测技术进行一定研究的基础上提出了一种新的内存泄漏的检测方法,即基于GCC编译器的内存泄漏检测技术。该方法是在GCC编译过程中,直接分析被检测程序的中间表示形式,并插入了我们的监测函数,在运行中动态地收集相关数据信息,并采用了基于指针变量跟踪和引用计数的分析方法,精确定位造成内存泄漏的代码行。这种内存泄漏的检测方法所采用的关键技术及其特性主要体现在以下几点:
·基于GCC编译器的程序分析技术
基于GCC的语法树与RTL表示形式的程序分析技术,一方面获得了许多源程序特性的信息数据,避免了直接分析源程序代码的较高实现代价,另一方面,由于分析基于GCC编译器的中间表示层,因此实现了检测的平台无关性;
·指针变量跟踪分析
该技术通过跟踪所有指针变量的引用操作来获取程序的内存引用信息。它采用一个有关所有指针变量的信息库,运行中检查每一次对内存的引用操作,并及时更新信息库的信息,使得我们能够以最精确的方式跟踪每一次程序对内存的引用。
·引用计数算法
采用了垃圾回收机制中的引用计数法,根据内存的引用计数的变化来检测程序中丢失的内存,因此能够在对程序动态跟踪分析的过程中,实时精确地定位造成内存泄漏的准确位置并给出详细的诊断信息。