基于GCC关键变量数据流分析算法的程序切片技术
- 格式:pdf
- 大小:1.47 MB
- 文档页数:9
GCC编译C源代码的四个步骤GCC是一种广泛使用的开放源代码的编译器工具,被广泛用于编译C 语言程序。
GCC编译C源代码的过程可以分为四个主要步骤:预处理、编译、汇编和链接。
1. 预处理(Preprocessing):预处理是GCC编译C源代码的第一个步骤,它主要对源代码进行一些宏展开和包含头文件处理的操作。
预处理器负责将所有以“#”开头的指令进行处理,例如#include和#define等。
在预处理阶段,预处理器会根据头文件的指导将源代码中包含的相关文件插入到对应的位置,展开宏,并进行条件编译。
预处理后的代码会生成一个.i文件,其中包含了展开后的所有代码。
在预处理阶段,一些常用的预处理指令包括:- #include:用于导入头文件,将头文件中的内容插入到对应位置。
- #define:用于定义宏,可以替换代码中的标识符。
- #ifdef,#ifndef,#endif:用于条件编译,根据条件选择性地编译代码。
- #ifdef,#else,#endif:与#ifdef类似,但当条件不满足时选择另一段代码。
编译是GCC编译C源代码的第二个步骤,它将预处理生成的.i文件编译成汇编语言的文件。
编译器将C代码转换为一组汇编语言指令,这些指令描述了要执行的操作。
编译器会对代码进行语法检查、语义分析和优化,并将其转换成等效的汇编语言表示。
编译输出的文件通常是以.s作为扩展名,表示它是一个汇编文件。
在编译阶段,GCC会进行一些优化,以提高程序的执行效率。
编译器的优化技术包括常量折叠、循环展开、运算替换等。
这些优化技术可以减少程序运行时的计算量和内存访问次数,从而提高程序的性能。
3. 汇编(Assembling):4. 链接(Linking):链接是GCC编译C源代码的最后一个步骤,它将汇编文件和其他需要的库文件链接在一起,生成最终的可执行程序。
链接器负责解决函数和数据的引用关系,并将它们合并成一个完整的可执行文件。
gcc编译器原理1. 概述GCC(GNU Compiler Collection)是一个自由软件,也是一个功能强大的编译器集合。
它由GNU项目开发,能够编译C、C++、Fortran等多种编程语言。
GCC编译器广泛应用于各种操作系统和平台上,是许多开源软件的首选编译器。
本文将深入探讨GCC编译器的原理,包括词法分析、语法分析、语义分析和代码生成等方面,以及GCC的优化技术。
我们将从整体结构开始,逐步解析GCC编译器的工作过程。
2. 编译器的组成结构GCC编译器可以分为几个主要部分:前端、中间端和后端。
下面将详细介绍每个部分的功能和工作原理。
2.1 前端前端是GCC编译器的第一个阶段,负责将源代码转换为中间表示形式。
前端过程包括词法分析和语法分析。
具体步骤如下:2.1.1 词法分析词法分析是将源代码分解成一个个标记(token)的过程。
编译器会利用正则表达式匹配源代码中的关键字、标识符、运算符等,并生成相应的标记流。
词法分析的主要任务是对输入的源代码进行扫描,产生一个个标记。
这些标记将作为语法分析的输入。
2.1.2 语法分析语法分析是将词法分析得到的标记流转化为抽象语法树(AST)的过程。
编译器会根据语法规则进行分析,构建以语法为基础的树形结构,用于分析源代码的结构和语义。
语法分析的主要任务是识别源代码的语法结构,检查其语法正确性,并生成相应的语法树。
2.2 中间端中间端是GCC编译器的第二个阶段,负责对前端输出的中间表示形式进行优化和转换。
主要包括优化和生成中间代码。
2.2.1 优化优化是中间端的核心部分,它可以对中间代码进行各种优化操作,以提高程序的执行效率和资源利用率。
GCC编译器内置了各种优化技术,例如常量传播、循环优化和代码消除等,可以根据编译器选项进行设置。
优化的目标是使程序在满足功能要求的前提下,尽可能地减少代码量、提高执行速度和降低资源消耗。
2.2.2 中间代码生成中间代码生成是将经过优化的中间表示形式转换为目标机器代码的过程。
gcc报告解读-回复题目:[GCC报告解读] - 理解GCC报告,剖析GCC的特点和应用引言:GCC(GNU Compiler Collection)是一款广泛应用于编译器设计和开发中的免费软件。
作为一个开源项目,GCC提供了多个前端和后端,支持多种编程语言和目标硬件平台。
本文将介绍GCC报告解读,剖析GCC的特点和应用,为读者提供一个深入理解GCC的指南。
一、GCC报告的概述GCC报告是GCC项目团队定期发布的一份技术报告,旨在介绍GCC的新特性、改进、性能数据和其他相关信息。
该报告的目标是让用户和开发者了解GCC的最新动态,提供技术支持和指导。
二、GCC报告的结构GCC报告通常包括以下主要部分:1. 引言:介绍GCC报告的目的和背景信息。
2. 新特性和改进:介绍GCC最新版本的新增功能和改进。
3. 性能数据:展示GCC在不同编译任务上的性能数据和比较。
4. 应用案例:展示GCC在不同领域和项目中的应用案例。
5. 开发者指南:提供GCC的使用指南和技巧。
三、GCC报告的特点GCC报告具有以下特点:1. 实用性:GCC报告主要关注实际应用,提供了大量的实用案例和性能数据,使用户可以更好地评估GCC在各种场景下的优势和适用性。
2. 全面性:GCC报告不仅涵盖了GCC最新版本的新特性和改进,还会综合考虑用户反馈和需求,提供反馈机制和定期更新,确保GCC持续改进和适应不同编程环境的需求。
3. 可定制性:GCC报告根据不同类型的用户提供了针对性的指南和建议,让用户根据自身需求对GCC进行定制和配置,提高编译效率和优化性能。
四、GCC的应用案例GCC作为一款功能强大的编译器,被广泛应用于各种场景和项目中。
以下是一些典型的GCC应用案例:1. 操作系统开发:GCC在操作系统内核开发中占据重要地位,例如Linux 操作系统的核心组件就是使用GCC编写的。
2. 嵌入式系统:GCC被广泛用于嵌入式系统中,对硬件平台的支持度高,具有较强的可移植性和优化能力。
切片处理的名词解释切片处理是一种广泛应用于数据处理、图像处理、信号处理等领域的方法,用于对大数据集进行分割、筛选、聚合和转换等操作。
切片处理通过将数据集按照一定规则进行划分,可以提高数据处理的效率和准确性,并且便于后续的数据分析和应用。
一、什么是切片处理切片处理是将大数据集划分为多个较小的数据块,以便对每个数据块进行并行处理或者按照一定的顺序进行处理。
这些数据块被称为切片或分片,每个切片只包含整个数据集的一部分。
切片处理可以基于数据的特性、规则或者其他约束条件来进行划分,可以按照时间段、地理位置、特定属性等进行选择,以满足特定的数据处理需求。
二、切片处理的优势1. 提高数据处理效率:对于大数据集,采用切片处理可以将数据分成多个部分,并行处理每个切片,大大缩短了数据处理的时间。
每个切片只处理所需要的数据,避免了对整个数据集进行操作的冗余。
2. 提升数据处理准确性:切片处理可以精确选择需要处理的数据,排除了不必要的干扰和噪声。
通过对每个切片进行独立处理,并将结果进行合并,可以提高数据处理的准确性和可靠性。
3. 便于数据分析和应用:通过将数据切分为多个切片,可以更方便地进行数据分析、统计和挖掘,快速发现数据的规律和趋势,为后续的决策和应用提供支持。
三、切片处理的应用领域1. 数据处理:在大数据分析中,切片处理常被用于对海量数据进行分割和聚合。
例如,在电商领域,可以将用户购买记录按照时间切片,统计每个时间段的销售额和订单量,以分析用户的购买行为和市场趋势。
2. 图像处理:在图像处理应用中,切片处理可以将图像切分为多个小块,以实现对图像的快速处理。
例如,在图像识别任务中,可以将图像切片后并行进行特征提取和模式匹配,提高图像识别的速度和准确性。
3. 信号处理:在通信领域中,切片处理常用于对信号进行分析和处理。
例如,对音频信号进行切片后,可以对每个切片进行降噪、去除杂音等处理,提高音频的清晰度和质量。
四、切片处理的实现方法切片处理的具体实现方法有很多,根据不同的应用场景和需求,可以选择不同的方法。
(转贴)linux 下的软件开发之GCC,GDB用法篇 -|tinylee 发表于 2005-8-22 1:02:00在为Linux开发应用程序时,绝大多数情况下使用的都是C语言,因此几乎每一位Linux程序员面临的首要问题都是如何灵活运用C编译器。
目前Linux下最常用的C语言编译器是GCC(GNU Compiler Collection),它是GNU项目中符合ANSI C标准的编译系统,能够编译用C、C++和Object C等语言编写的程序。
GCC不仅功能非常强大,结构也异常灵活。
最值得称道的一点就是它可以通过不同的前端模块来支持各种语言,如Java、Fortran、Pascal、Modula-3和Ada等。
开放、自由和灵活是Linux的魅力所在,而这一点在GCC上的体现就是程序员通过它能够更好地控制整个编译过程。
在使用GCC编译程序时,编译过程可以被细分为四个阶段:◆ 预处理(Pre-Processing)◆ 编译(Compiling)◆ 汇编(Assembling)◆ 链接(Linking)Linux程序员可以根据自己的需要让GCC在编译的任何阶段结束,以便检查或使用编译器在该阶段的输出信息,或者对最后生成的二进制文件进行控制,以便通过加入不同数量和种类的调试代码来为今后的调试做好准备。
和其它常用的编译器一样,GCC也提供了灵活而强大的代码优化功能,利用它可以生成执行效率更高的代码。
GCC提供了30多条警告信息和三个警告级别,使用它们有助于增强程序的稳定性和可移植性。
此外,GCC 还对标准的C和C++语言进行了大量的扩展,提高程序的执行效率,有助于编译器进行代码优化,能够减轻编程的工作量。
GCC起步在学习使用GCC之前,下面的这个例子能够帮助用户迅速理解GCC的工作原理,并将其立即运用到实际的项目开发中去。
首先用熟悉的编辑器输入清单1所示的代码:清单1:hello.c#i nclude <stdio.h>int main(void){printf ("Hello world, Linux programming!n");return 0;}然后执行下面的命令编译和运行这段程序:# gcc hello.c -o hello# ./helloHello world, Linux programming!从程序员的角度看,只需简单地执行一条GCC命令就可以了,但从编译器的角度来看,却需要完成一系列非常繁杂的工作。
GCC编译器的原理及优化GCC是一款流行的编译器,常用于 C 和 C++ 程序的编译,也支持 Ada、Fortran、Objective-C、Pascal、Java、Go 等多种编程语言,是许多操作系统和开发工具链的基础。
下面将简单介绍GCC 的原理以及GCC常用的优化技术。
GCC编译器原理GCC的编译过程分为四个阶段:预处理、编译、汇编和链接。
其中,预处理阶段(Preprocessing Stage)将源代码中的注释、宏定义等进行替换和扩展,输出预处理后的代码;编译阶段(Compilation Stage)将预处理后的代码翻译为汇编代码;汇编阶段(Assembling Stage)将汇编代码翻译为机器语言指令,并生成目标文件;链接阶段(Linking Stage)将目标文件进行链接,生成可执行文件。
在GCC编译过程中,代码的优化是十分重要的环节,可分为三个级别:0、1、2。
其中,优化级别0(-O0)只进行语法检查和以标准形式生成汇编代码等基本工作,不做优化处理;优化级别1(-O1)从代码大小和执行时间的多个方面进行优化,为常规优化选项;优化级别2(-O2)是为了产生更快速的可执行文件而进行各种可能的优化,需要花费更长的编译时间,有时会增加代码的大小。
GCC常用的优化技术1. 减少指令数减少指令数是通过更好的代码重排来实现的。
在编译器所生成的代码中,指令数量是一个关键的性能度量。
如果能够缩短执行路径,就能够减少指令数量,从而进一步提高性能。
例如,通过运用公因式化技术,可以使得代码中重复出现的部分被整合到一起。
2. 消除不必要的指令GCC会消除一些不必要的指令,比如,明显的常量表达式,如:“A+0”,欺骗一个无条件的 if 分支,如:如果没有一个 if 语句的else 子句和一个常量表达式被用在条件里,则去除其它的代码。
3. 改进寄存器使用GCC可以通过对代码重排,使得寄存器的使用最大化,最终进一步提升系统性能。
gcc编译器的工作原理gcc编译器是一种广泛应用于开发软件的编译器,它的工作原理包括词法分析、语法分析、语义分析、优化和代码生成等过程。
下面将详细介绍gcc编译器的工作原理。
一、词法分析词法分析是gcc编译器的第一个步骤,它的主要目的是将源代码分解为一个个的词法单元(Token)。
词法单元可以是关键字、标识符、运算符、常量等。
gcc编译器通过扫描源代码,识别出每个词法单元,并生成对应的Token流。
二、语法分析语法分析是gcc编译器的第二个步骤,它的主要任务是根据Token 流构建抽象语法树(Abstract Syntax Tree,AST)。
抽象语法树是一种树状结构,用于表示源代码的语法结构。
gcc编译器通过语法分析,检查源代码是否符合语法规则,并生成对应的抽象语法树。
三、语义分析语义分析是gcc编译器的第三个步骤,它的主要目的是检查源代码的语义是否正确。
gcc编译器通过对抽象语法树进行遍历和分析,检查变量的声明和使用是否正确,函数的调用是否合法等。
语义分析还包括类型检查、作用域分析等重要步骤。
四、优化优化是gcc编译器的第四个步骤,它的主要任务是对中间代码进行优化,以提高程序的性能和效率。
gcc编译器通过对中间代码进行各种优化操作,如常量折叠、循环展开、函数内联等,来减少程序的运行时间和内存占用。
五、代码生成代码生成是gcc编译器的最后一个步骤,它的主要任务是根据优化后的中间代码生成目标代码。
目标代码可以是机器码、汇编代码或其他形式的中间代码。
gcc编译器通过代码生成,将中间代码转换为可执行的目标代码,供计算机运行。
总结:gcc编译器的工作原理包括词法分析、语法分析、语义分析、优化和代码生成等多个步骤。
通过这些步骤,gcc编译器可以将源代码转换为可执行的目标代码。
词法分析将源代码分解为词法单元,语法分析构建抽象语法树,语义分析检查语法的正确性,优化提高程序的性能,代码生成生成目标代码。
gcc编译器的工作原理的深入理解对于软件开发人员来说是非常重要的,它有助于我们编写出更高效、更可靠的程序。
C语言中的性能分析和性能优化技术C语言作为一种广泛使用的编程语言,在许多领域中都得到了广泛应用。
然而,在大规模的软件开发过程中,性能问题往往是一个不可避免的挑战。
本文将介绍C语言中的性能分析和性能优化技术,帮助开发人员提高代码的性能。
一、性能分析技术1.1 代码剖析(Code Profiling)代码剖析是一种常用的性能分析技术,通过记录代码的执行时间以及函数调用次数等信息,帮助开发人员了解程序的性能瓶颈所在。
在C语言中,可以使用一些工具来进行代码剖析,比如GNU Profiler (gprof)和valgrind等。
1.2 内存分析(Memory Profiling)除了代码的执行时间,内存使用也是影响程序性能的重要因素。
在C语言中,动态内存的分配和释放往往是需要开发人员特别注意的地方。
通过使用内存分析工具,如valgrind的Massif,可以检测内存泄漏和内存使用过高等问题,从而提高程序的性能。
二、性能优化技术2.1 算法优化在优化程序性能时,首先需要考虑的是算法的选择。
不同算法在处理相同问题时可能具有不同的时间复杂度和空间复杂度。
因此,选择合适的算法可以极大地提高程序的性能。
在C语言中,可以通过分析算法的时间复杂度来选择合适的算法。
2.2 循环优化循环是C语言中常见的结构,也是性能优化的热点。
对于循环的优化,可以考虑减少循环的迭代次数、合并循环、循环展开等技术。
通过对循环的优化,可以减少不必要的计算和内存访问,提高程序的执行效率。
2.3 内存访问优化在C语言中,内存的访问方式对程序的性能有着重要的影响。
合理地使用缓存、减少内存的访问次数和提高内存的局部性是优化程序性能的关键。
此外,了解C语言中的数据结构对内存访问的影响,也是进行内存访问优化的重要一环。
2.4 并行化优化随着多核处理器的普及,将程序并行化成为提高性能的有效手段。
在C语言中,可以使用库函数或者多线程的方式实现并行化。
但是,并行化也需要注意同步和共享资源的问题,避免出现数据竞争和死锁等并发相关的问题。
1引言随着现代计算机的系统程序规模日趋庞大,以及程序语言的发展逐渐偏于人性化、复杂化,期望通过传统的阅读全部代码来理解程序是不现实的。
程序切片技术可以将源程序中影响兴趣点处变量值的相关部分代码抽取出来,是一种重要的程序理解与分析方法。
但是由于源码中语句与变量的结构、引用、控制等关系较为复杂,如果直接对大型应用程序的源码进行切片,或者需要设计十分复杂的程序切片算法,或者最终得到的结果不够准确[1]。
在所有的程序切片优化方式中,利用编译优化技术来提高程序切片效率是一个重要的优化方向[2]。
然而,已有的研究主要是通过开发人员直接在程序的中间表示层进行操作和优化,导致无法充分利用程序的编译时信息和成熟的编译器优化技术,还有的实现因为受中间语言转换工具的限制,无法满足对程序语言的完全支基于GCC关键变量数据流分析算法的程序切片技术杨小川,姜军,马晓东,漆锋滨YANG Xiaochuan,JIANG Jun,MA Xiaodong,QI Fengbin江南计算技术研究所,江苏无锡214083Jiangnan Institute of Computing Technology,Wuxi,Jiangsu214083,ChinaY ANG Xiaochuan,JIANG Jun,MA Xiaodong,et al.Program slicing technology based on critical variable data-flow analysis algorithm in GCC puter Engineering and Applications,2017,53(24):40-47.Abstract:With the scale of program increasing and program complexity rising,program slicing through direct code anal-ysis becomes much harder.In the existed approaches that use compiler optimization techniques for obtaining more accu-rate slices,compile-time information and existed compiler optimization are overlooked,program languages are not fully supported.To solve this problem,this paper analyzes the intermediate representations of GCC compiler,and proposes a program slicing technology based on critical variable dataflow analysis algorithm in GCC compiler.This algorithm col-lects dataflow information both within and between basic blocks through iteratively solving the dataflow equations,which is based on GIMPLE intermediate representation and processes a basic block in each time.The proposed technique can find the critical variables and critical statements relevant to target function,and reduces the scale of the sliced program.The results of experiment show that the proposed algorithm is feasible.Key words:program slicing;target function;critical variants;data flow analysis;GIMPLE intermediate representation摘要:随着程序的规模的扩大和复杂度的提高,通过直接分析源码进行程序切片,变得十分困难。
在现有的利用编译优化技术来优化程序切片的方法中,存在无法有效利用程序的编译时信息和编译器的优化技术,以及对语言的支持不完善的问题。
为此,分析了GCC编译器在编译时的中间表示,首次提出了基于GCC关键变量数据流分析算法的程序切片技术,以程序的GIMPLE中间表示为基础,以程序基本块为单位,通过迭代求解数据流方程,分析程序基本块内和不同基本块间的关键变量数据流信息。
该程序切片技术可以获取源程序中仅与预设目标函数相关的关键变量和关键语句,缩减程序规模。
最后通过实验,证明了该算法的可行性。
关键词:程序切片;目标函数;关键变量;数据流分析;GIMPLE中间表示文献标志码:A中图分类号:TP311.5doi:10.3778/j.issn.1002-8331.1608-0241基金项目:国家“863”计划基金资助项目(No.2012AA010903)。
作者简介:杨小川(1989—),男,助理工程师,研究领域为安全编译与高性能编译优化技术,E-mail:yangxchx@;姜军(1980—),男,工程师,研究领域为高性能编译;马晓东(1979—),男,博士,工程师,研究领域为高性能编译;漆锋滨(1966—),男,博士,高级工程师,研究领域为计算机并行体系结构和高性能编译。
收稿日期:2016-08-09修回日期:2016-10-11文章编号:1002-8331(2017)24-0040-08CNKI网络优先出版:2017-02-10,/kcms/detail/11.2127.TP.20170210.0844.038.html持。
GCC编译器以数据流分析为基础,在程序编译时的GIMPLE中间表示层进行了大量优化,能够直接使用程序的编译时信息和编译器的优化来简化源码中不同语句与变量之间的关系[3],是优化切片的理想中间表示形式,但是GCC已有的数据流分析框架并不支持对程序中的兴趣点进行数据流分析,因此并不能实现对源程序的切片。
本文通过对GCC编译器的中间代码进行分析,并结合程序切片算法的特点,提出了一种基于GCC关键变量数据流分析算法的程序切片技术,该技术能够借助GCC已有的通用编译优化实现,在尽可能保证算法的简洁与高效的同时又能满足大规模程序分析的需要。
2程序切片技术及GCC编译的中间表示2.1程序切片技术程序切片的概念最初是由Weiser中提出来的[4]。
程序切片包含了源程序中所有可能会影响到兴趣点处变量值的部分,这种特定的代码抽取方式被称为切片准则,切片准则一般记为<P,V>,其中P是语句在源程序中的位置(即兴趣点的位置),V是程序中位于该兴趣点的变量或变量集合。
程序通过切片准则<P,V>得到的子程序在兴趣点P的变量值与源程序一致,亦即V在子程序的P点的值与在源程序中一样[5]。
程序切片广泛应用于软件维护、软件度量、程序调试、软件重用等多个方面。
Weiser提出的切片算法,是通过对程序进行数据流和控制流分析得到的,其特点可归纳为“静态可执行的后向切片”。
称其“静态”是因为在切片的计算过程中完全不考虑程序的输入,称其“可执行”是指得到的切片仍旧是一个可执行的程序,称其“后向”是因为从后往前分析源程序语句。
理论上,要获取程序的“最小”切片是不可能的,但是却可以通过对程序进行数据流分析得到一个近似解[4],Weiser提出的程序切片算法,就是通过对源程序进行数据流分析实现的。
在程序切片的发展过程中,研究人员提出了多种方法来优化程序切片的效果,其中一个重要的方向就是利用编译优化技术,如常量传播、循环变换等,来提升程序切片的效果。
分析已有的相关实现,主要的流程都是先将程序“翻译”为特定的中间表示,然后利用编译优化技术将该中间表示转换为更容易实现切片的形式,并最终在优化过后的中间表示上完成对源程序的切片。
如,Field等人提出的参数程序切片技术[6],需要先利用编程环境生成器将源程序转换为Pim中间表示,然后再做优化。
由于该生成器不支持将源程序中的非结构化控制流转化等转换为Pim中间表示,因此该技术只能支持部分C程序特性。
而且,在Pim中间表示层的优化需要开发人员自己通过项重写或者图重写技术才能实现。
Ernst在文献[7]中使用了值依赖图作为程序的中间表示,该依赖图的特点是将程序控制流信息转换为数据流信息,并且将所有的值和计算都显式转换为值依赖图相应的表示形式。
由于在值依赖图上使用的编译优化技术也需要开发人员自写,因此该实现也无法充分利用程序的编译时信息和编译优化。
陆仲达设计了一种利用开源GCC编译器来实现对C++程序切片的优化工具Cslicer[8]。
通过修改GCC编译器,将程序在GCC编译时的抽象语法树从程序的整个编译流程中分离出来,然后对提取出的抽象语法树施加优化,由于利用了编译器前端的词法分析、语法分析等技术,该方法较好地实现了对含有结构体的程序的分析,但是,该方法同样需要自写作用于抽象语法树表示的编译优化。
Cuoq等人[9]通过修改CIL工具前端,将源程序转换为ACSL中间表示,并在其上进行常量传播等优化,实现了静态程序切片工具Frama-C。
该技术能够在一定程度上获得程序的编译时信息,但是并不能完全支持C 语言的所有特性,而且在ACSL中间表示层的所有编译优化都需要开发人员自己实现。
Komondoor等人[10]则通过将源程序转换为Pim中间表示,然后再利用编译优化来简化程序切片。
该方法能够解决文献[6]中无法完全支持C程序的问题,但是基于Pim中间表示的编译优化需要通过项重写等技术才能实现,因此仍旧无法重用程序的编译时信息和编译器已有的成熟优化。
Halder等人[11]通过将源程序转换为抽象依赖状态图,并利用常量传播等编译优化技术对该状态图进行简化,最终实现对C语言程序的切片。
该方法能够加速判断程序中的条件语句是否与兴趣点相关,但其中用到的编译优化实现起来较为复杂。
通过以上分析,可以看到,现有的利用编译优化技术来优化程序切片的方法中,存在无法有效利用程序的编译时信息和编译器的优化技术,以及对语言的支持不完善的问题。
2.2GCC编译的中间表示GCC(GNU Compiller Collect,GNU编译器集合,下文简称GCC)是一款功能强大的开源编译器,它在编译代码的过程中,将源文件语句转化为多种中间表示,并在每一个中间表示层都进行优化,从而获得优化后的汇编代码[12]。