代码优化概述

合集下载

怎么做代码优化

怎么做代码优化
经过以上方法清除后,大概可以删除70%左右的垃圾代码

默认属性清理
比如:在设计网页时,如果对某个对象不设置左对齐属性,页面中的内容也 是默认以左对齐的方式显示的,所以代码中的左对齐属性可以删除的
常见默认属性: align=“left”:横向左对齐 valign=“middle”:竖向居中对齐 size=“3”:文字大小默认是3 font=“#000000”:文字颜色默认是黑色 Bgcolor=“#FFFFFF”:文字背景颜色是白色

精简代码
定义:精简代码指清除或者简化页面中的代码,从而达到降低页面体 积、提高页面相关性的用户体验和搜索引擎友好性。 清理代码垃圾 HTML标签转换 CSS优化 JavaScript优化 表格优化

清理代码垃圾
代码垃圾:页面中的冗余代码,指删除后不影响正常显示的非必要代 码

七草网络营销学院
如何能过SEO赚钱
SEO从入门与进阶
讲师:蔡小兵
QQ:40002:代码优化

代码优化概述
•代码优化就是对网页中的HTML源代码进行必 要的调整,以提高页面的友好性。页面经过代 码优化后,一方面可以有效精简页面中的冗余 代码,加快页面的显示速度,同时也降低页面 占用搜索引擎服务器的存储空间,从而提高页 面用户体验及搜索引擎友好性。 •代码优化的主要工作包括精简代码、头部优化 及权重标签使用。

CSS优化
CSS优化的主要工作是改变CSS的调用方式,避免使用CSS为重要内 容定义样式,以达到精简代码和提供页面相关性。
CSS调用方式: 内部调用:头部调用、主体调用 外部调用

CSS优化
头部调用: 把需要使用CSS样式内容直接放置在页面的头部中(即 <head></head>区域)。 如果样式内容少则影响不大,否则会给页面带来负面影响 主题调用: 页面主体调用就是在页面主体(<body></body>)需要样式控制的内 容中添加相应CSS样式。不推荐使用。

代码优化的概念

代码优化的概念

代码优化的概念代码优化是指通过对程序进行调整和重构来提高代码的效率和性能,以达到更好的运行效果和用户体验。

优化的目标是在不改变程序功能的前提下,尽可能减少时间和空间的占用,使程序更加高效、可维护和可扩展。

优秀的代码优化不仅能提高代码的执行速度、响应速度和稳定性,还能改善代码的可读性和可维护性,有利于程序完整性的保持和可靠性的提高。

代码优化的重要性代码优化是开发过程中必不可少的环节,因为优化后的代码相较于低效的代码,具备以下优势:1. 提高程序运行效率:绝大多数程序的瓶颈在于运行时间和机器资源的占用,而代码优化可以通过降低算法复杂度、减少不必要的循环和分支、避免重复计算等方式,使程序运行速度更快,更加节省计算机资源占用。

2. 改善用户体验:快速响应和流畅的界面对于用户来说是至关重要的,而优化的代码可以使程序更加快速响应,避免界面卡顿和延迟,从而提高用户的使用体验。

3. 提高程序稳定性:优化后的代码往往更加清晰、逻辑更加严谨、异常处理更加完善,从而可以减少程序崩溃和错误的发生,提高程序的健壮性和可靠性。

4. 提高代码可维护性:优化后的代码结构更加清晰,名称规范可读性更高,抽象层次更为明确,从而可以减少后期编码的时间和困难,增强代码的可维护性和可扩展性。

代码优化的方法和技巧对代码进行优化通常需要考虑多种方式和角度,下面列举几种常用的优化方法和技巧:1. 使用高效的算法和数据结构:优化程序的算法和数据结构是优化代码的基础,它可以显著提高程序性能。

对于复杂程序来说,使用适当的数据结构(如散列表、二叉树、图等)可以有效减少程序的运行时间。

此外,应该尝试使用高效的排序算法和查找算法(如归并排序、快速排序、二分查找等)来进一步提高程序的效率。

2. 避免重复计算和内存浪费:在编写代码时应该避免进行重复计算,避免浪费计算资源占用。

同样,应该尽可能避免内存浪费(如重复创建列表对象、使用过多的全局变量等),这不仅会浪费更多的内存,而且会导致程序变慢。

应用程序的性能优化技术

应用程序的性能优化技术

应用程序的性能优化技术随着移动互联网的崛起和智能手机的普及,应用程序成为了人们日常生活不可或缺的一部分。

然而,在应用程序的使用中,用户最关心的是其功能是否满足需求和性能是否流畅。

因此,如何提高应用程序的性能成为了开发人员亟待解决的问题。

本文将介绍应用程序的性能优化技术。

一、代码优化代码优化是提高应用程序性能的重要手段,它通过优化算法、减少代码量、优化缓存等方式来提高程序的性能。

代码优化的第一步是消除代码中的浪费,如减少无用的变量和函数,避免重复计算等。

此外,为了提高代码的效率,可以选择使用高效的算法和数据结构,充分利用硬件的特性。

二、资源管理优化资源管理优化是指对应用程序所使用的内存、网络带宽等硬件资源进行有效利用和合理规划的过程。

要实现资源管理优化,就需要掌握应用程序的资源消耗情况,及时限制占用资源较高的进程,并优化相关算法,实现资源的合理分配与利用。

三、UI设计优化UI设计是应用程序用户体验的关键所在。

优化UI的设计可以提高整个应用程序的性能,包括响应时间、使用感受等方面。

要实现UI设计优化,需要从UI的布局、结构、色彩等方面入手,避免使用无用的UI元素,合理安排相关因素,使UI的交互体验更流畅舒适。

四、缓存技术优化缓存技术是提高应用程序性能的强有力工具。

缓存主要是将数据存放在内存中,提高数据的读取和访问速度。

在应用程序中,常用的缓存技术有内存缓存、磁盘缓存、网络缓存等。

合理的缓存策略可以有效提高应用程序的响应速度,改善用户体验。

五、网络连接优化网络连接是应用程序运行的重要依赖,因此优化网络连接能够提高应用程序的性能。

网络连接优化的具体方法包括:减少网络请求、请求内容压缩、使用并发请求等。

这些技术可以有效减少网络请求的加载时间,提高网络连接速度,从而提高应用程序的响应速度和使用体验。

总结综上所述,提高应用程序的性能是开发人员必须关注的课题。

各项优化技术和策略如代码优化、资源管理优化、UI设计优化、缓存技术优化、网络连接优化等,都可以有效地提高应用程序的性能,改善用户体验。

代码优化的思路和方法

代码优化的思路和方法

代码优化的思路和方法代码优化的思路和方法随着计算机技术的不断进步,越来越多的人开始接触和使用计算机。

从简单的算数计算到更复杂的程序设计,计算机在各个领域都有着广泛的应用。

而在编写程序的过程中,代码优化问题成为了一个非常重要的话题。

代码优化能够提高程序的效率,减少系统资源的消耗,提高程序的运行速度,降低出错的风险,从而让程序能够更加稳定和可靠地运行。

本篇文章将介绍代码优化的思路和方法,旨在帮助读者更好地了解和掌握代码优化技术。

一、什么是代码优化代码优化是一种改善程序性能和减少程序资源的消耗的技术。

代码优化能够降低程序的开销,使其更有效率运行。

它主要是通过修改代码,使之更加精简和高效,从而达到提高程序性能的目的。

代码优化在程序开发过程中是一项非常重要的任务。

一个优化良好的程序能够处理更多的数据量,更快地运行,同时也可以减少所占用的系统资源。

例如,一个优化良好的程序能够更快地完成排序、搜索和过滤等操作,提高工作效率,节省时间和金钱。

二、代码优化的思路代码优化的思路主要包括以下几个方面:1.采用适当的数据结构在编写程序的过程中,采用恰当的数据结构非常重要。

例如,当需要对一个大型数据集进行排序时,使用二叉树进行排序会比使用简单数组等数据结构更有效率。

2.将多个语句合并为一个语句很多时候,我们可能会写出很多重复的语句,这样会增加程序运行的时间。

如果能将这些语句合并为一个语句,就能够减少代码的行数,并提高程序的执行效率。

3.减少变量的使用在编写程序的过程中,我们应该尽量减少变量的使用。

变量的定义和赋值操作需要占用系统资源。

在一些简单的情况下,我们可以使用常量代替变量,减少变量的定义和赋值操作。

4.减少函数调用当程序执行函数调用时,程序需要进行额外的操作,这样会增加程序的开销。

因此,在编写程序的过程中,我们应尽量减少函数的调用。

5.减少循环的使用循环是一种常见的程序结构,但循环的使用会导致程序的执行时间变长。

当处理大量数据时,可以使用其他更有效的方法,例如map、reduce等,来减少循环的使用。

编译优化的方法-概述说明以及解释

编译优化的方法-概述说明以及解释

编译优化的方法-概述说明以及解释1.引言1.1 概述编译优化是一种提高程序执行效率的技术,通过对程序代码的优化,使程序在执行过程中尽可能地减少时间和资源的消耗。

在软件开发中,编译优化是一个非常重要的环节,能够显著提高程序的性能和响应速度。

本文将介绍一些常用的编译优化方法,帮助读者更好地理解和应用这些技术。

在正文部分,我们将详细探讨两种常见的编译优化方法,并阐述它们的要点和优势。

此外,我们还将总结这些方法的应用场景和效果,并展望未来的发展方向。

通过本文的学习,读者可以了解到编译优化的基本概念和原理,并能够应用这些方法优化自己的程序。

编译优化不仅可以提高程序的运行效率,还可以减少资源的消耗,提高机器的利用率。

因此,掌握编译优化技术对于开发人员和计算机科学领域的研究人员来说都是非常重要的。

在接下来的几节中,我们将深入介绍编译优化方法的具体实现和应用。

希望本文能够对读者有所启发,并为大家的学习和工作提供一些参考和指导。

让我们一起开始深入探索编译优化的方法吧!1.2 文章结构文章结构部分主要介绍了整篇文章的组织框架和章节安排。

本文分为引言、正文和结论三个部分。

引言部分主要概述了编译优化的方法这一主题,并介绍了文章的结构和目的。

正文部分是文章的核心部分,主要围绕编译优化方法展开。

其中,编译优化方法1和编译优化方法2是本文的重点讨论内容。

在每个方法下面,又有对应的要点进行详细的阐述和说明。

结论部分是对整篇文章进行总结和展望。

总结部分对编译优化方法的效果和意义进行概括,并对方法的应用前景进行展望。

通过以上章节的安排,本文旨在全面介绍编译优化的方法,为读者提供有关该主题的详尽信息,并对其意义和可能的发展方向进行探讨。

1.3 目的编译优化是指对程序进行各种优化操作,以提高代码的执行效率和性能。

其目的是通过改变代码的执行方式或结构,使得程序在运行时能够更快地执行,并且占用更少的资源。

具体而言,编译优化的目的包括以下几点:1. 提高程序执行速度:通过优化编译器的算法和技术,可以使得程序在执行过程中减少不必要的计算和逻辑判断,从而加快程序的执行速度。

软件优化明细

软件优化明细

软件优化明细1. 代码优化- 代码重构:对现有代码进行优化和重构,提高代码的可读性和可维护性。

代码重构:对现有代码进行优化和重构,提高代码的可读性和可维护性。

- 优化算法:根据具体业务需求,对算法进行优化,提高软件的运行速度和效率。

优化算法:根据具体业务需求,对算法进行优化,提高软件的运行速度和效率。

- 删除冗余代码:删除无用的代码或重复的功能实现,减少代码冗余,提高运行效率。

删除冗余代码:删除无用的代码或重复的功能实现,减少代码冗余,提高运行效率。

2. 数据库优化- 索引优化:对数据库中频繁访问的字段添加索引,加快查询速度。

索引优化:对数据库中频繁访问的字段添加索引,加快查询速度。

- 表结构优化:优化数据库表结构,减少冗余字段,提高数据存储和查询效率。

表结构优化:优化数据库表结构,减少冗余字段,提高数据存储和查询效率。

- 查询优化:优化数据库查询语句,减少查询时间,提高数据库性能。

查询优化:优化数据库查询语句,减少查询时间,提高数据库性能。

3. 图形界面优化- 界面布局优化:优化软件的界面布局,使用户操作更加直观和方便。

界面布局优化:优化软件的界面布局,使用户操作更加直观和方便。

- 响应速度优化:优化界面的响应速度,减少用户等待时间,提高用户体验。

响应速度优化:优化界面的响应速度,减少用户等待时间,提高用户体验。

- 美化界面设计:进行界面美化,提高软件的整体美观性和用户满意度。

美化界面设计:进行界面美化,提高软件的整体美观性和用户满意度。

4. 性能优化- 内存管理优化:优化软件的内存管理,减少内存占用,提高软件的运行速度和稳定性。

内存管理优化:优化软件的内存管理,减少内存占用,提高软件的运行速度和稳定性。

- 性能测试和优化:进行性能测试,找出软件的性能瓶颈,并进行相应的优化措施。

性能测试和优化:进行性能测试,找出软件的性能瓶颈,并进行相应的优化措施。

- 多线程优化:利用多线程技术,提高软件的并发处理能力和响应速度。

Java代码优化ppt课件

Java代码优化ppt课件

reference类型在32位系统上每个占用4bytes, 在64位系 统上每个占用8bytes。
19
100个entries,cost 8.6k, 实际的double=2*100*8=1.6k
20
Double=16+8,double=8,67%额外开销
21
TreeMap包括: 48bytes+n*40bytes(entry)
Cache分类实现 1.AlarmCache封装了活动告警/1409/清除告警的插入,活动放7天,清除3小时
2.AlarmCFPCache<cfp,fpList>增加本地缓存,提升查询效率
14
DW缓存优化 封装完,代码量依然很大,而且日志不方便,继续拆分:
1.alarmService负责写操作,cacheService负责读操作
3、找到优化的关键点
这是有效优化的关键。找到项目中与你的目标(性能、资源或其他)相背的地方,并将你的努力和 时间用在那里。举一个典型的例子,一个Web项目速度比较慢,开发者在优化时将大部分精力放在了数 据库优化上,最终发现真正的问题是网络连接慢。另外,不要分心于容易实现的问题。这些问题尽管很 容易解决,但可能不是必要的,或与你的目标不相符。容易优化并不意味着值得你花费工夫。
2、选择正确的优化指标
选择正确的指标,是优化的一个重要组成部分,你需要按照这些指标来测量优化工作的进展情况。如 果指标选择不恰当,或者完全错误,你所做的努力有可能白费了。即使指标正确,也必须有一些辨别。 在某些情况下,将最多的努力投入到运行消耗时间最多的那部分代码中,这是实用的策略。但也要记住, Unix/Linux内核的大部分时间花费在了空循环上。需要注意的是,如果你轻易选择了一个很容易达到的 指标,这作用不大,因为没有真正解决问题。你有必要选择一个更复杂的、更接近你的目标的指标。

编译原理 第5章--代码优化

编译原理  第5章--代码优化

(2) 确定满足以下条件的出口语句: 确定满足以下条件的出口语句 出口语句: 下一个入口语句的前导语句 入口语句的前导语句; ① 下一个入口语句的前导语句; 转移语句 包括转移语句自身); 语句(包括转移语句自身 ② 转移语句 包括转移语句自身 ; 停语句 包括停语句自身 包括停语句自身)。 ③ 停语句(包括停语句自身 。
第5章
代码优化
(3) 图中各个结点上可能附加一个或多个标识符,表示这些 图中各个结点上可能附加一个或多个标识符 附加一个或多个标识符, 变量具有该结点所代表的值。 变量具有该结点所代表的值。
一个基本块由一个四元式 序列组成 四元式都可以用相应的 一个 基本块由一个四元式序列 组成 , 且 每一个 四元式都可以用 相应的 基本块 由一个四元式序列组成, 每一个四元式都可以用 DAG结点表示。 结点表示。 结点表示 给出了不同四元式和与其对应的DAG结点形式。图中,各结点圆圈 结点形式。 图5–1给出了不同四元式和与其对应的 给出了不同四元式和与其对应的 结点形式 图中, 中的ni是构造 构造DAG过程中各结点的编号, 过程中各结点的编号, 中的 过程中各结点的编号 而各结点下面的符号(运算符、标识符或常数)是各结点的标记, 是各结点的标记 而各结点下面的符号 运算符、标识符或常数 是各结点的标记,各结点右 运算符 边的标识符是结点上的附加标识符。 边的标识符是结点上的附加标识符。 附加标识符 除了对应转移语句的结点右边可附加一语句位置来指示转移目标外, 除了对应转移语句的结点右边可附加一语句位置来指示转移目标外,其余 对应转移语句的结点右边可附加一语句位置来指示转移目标外 各类结点的右边只允许附加标识符。 各类结点的右边只允许附加标识符。 除对应于数组元素赋值的结点 标记为 继外, 除对应于数组元素赋值的结点(标记为 ]=)有三个后继外,其余结点最多只 应于数组元素赋值的结点 标记为[ 有三个后继外 有两个后继。 两个后继。 后继
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

代码优化概述
1.1.代码优化简介
代码优化是指对程序进行各种等价变换,使得从变换后的程序出发,能生成更高效的目标代码。

目标代码的质量,通常有两个衡量的标准:空间效率和时间效率。

有时空间优化也会导致时间优化(如减少指令条数),但通常它们是一对矛盾,不能兼顾。

代码优化的目的是产生更高效的代码,使程序以更快的速度、占用更少的空间运行。

对于编译器,代码优化分为三个阶段:
图1-1 代码优化流程图
为了获得更优化的程序,可以从各个环节着手。

首先,在源代码这一级,程序员可以通过选择适当的算法和安排适当的实现语句来提高程序的效率。

其次,再设计语义动作时,要尽可能产生高效的中间代码,同时还可以安排专门的编译优化阶段对中间代码进行各种等价变换,改进代码的效率。

最后,在目标代码这一级上,应该考虑如何有效地利用寄存器,如何选择指令,以及进行窥孔优化等。

对于编译优化,最主要的时机是在语法、语义分析生成中间代码之后,在中间代码上进行。

这一类优化不依赖于具体的计算机,而取决于语言的结构。

另一类优
化则是在生成目标程序时进行的,它在很大程度上与具体的计算机有关。

由优化编译程序提供的对代码的各种变换必须遵循如下原则[1]:
1)等价:经过优化后不改变程序运行的结果;
2)有效:优化后产生的目标代码运行时间较短,占用的存储空间较小;
3)合算:应尽可能以较低的代价取得较好的优化效果。

如果为实现一种
优化变换所花时间和精力,以及编译器编译源程序时的额外开销,不能
从目标程序的运行中得到补偿,那么是没有意义的。

在设计一个编译程序时,究竟应考虑哪些优化项目以及各种优化项目进行到何种程度,应权衡利弊,根据具体情况而定。

其中,控制流分析主要目的是分析出程序的循环结构.循环结构中的代码的效率是整个程序的效率的关键。

数据流分析进行数据流信息的收集,主要是变量的值的定义和使用情况的数据流信息.包括到达-定值分析;可用表达式;活跃变量。

最后,根据上面的分析,对中间代码进行等价变换。

对现代体系结构的编译器来说,代码优化非常重要,通过它能充分发挥硬件性能,提高执行效率。

所以对编译器的优化有更高的要求。

1.2.优化技术的分类
优化技术的分类有很多种方式,下面简单介绍传统的两种划分方式[2]:
1.根据优化所涉及的范围,现代编译器所使用的优化技术可以分为以下几
类:
1)局部优化(local optimization)
局部优化是指在基本块内进行的优化,考察一个基本块就可完成。

所谓基本块是指程序中顺序执行的语句序列,其中只有一个入口语句和一个出口语句。

程序的执行只能从入口语句进入,从出口语句退出。

这个代码序列中没有跳进或跳出语句(过程调用表示一种特殊的跳转),而且是顺序执行。

基本块可以通过有向无循环图(DAG)来表示,那么优化工作就是在DAG上所进行的一系列的变换,但是并不改变基本块所计算的表达式集合。

常用的局部优化技术包括局部公共子表达式删除、删除多余代码、交换语句次序、重命名临时变量。

2)循环优化(loop optimization)
所谓循环,简单而言就是指程序中可能反复执行的代码序列。

因为循环中的代码会反复的执行,所以循环的优化对于提高整个代码的质量有很大的帮助。

首先在控制流程图(CFG)中根据循环的定义找出循环,然后就可以针对每个循环进行相应的优化工作。

主要有以下三种:代码外提、删除归纳变量、强度削弱。

循环优化一直是研究的热点和难点,尤其是在并行处理系统中如何根据不同的循环类型进行循环置换(loop permutation),提高循环内矢量运算的并行性,都是当前的热门研究课题。

3)全局优化(global optimization)
一个过程可以由多个基本块按照相应的流程来组成。

全局优化就是基于这些基本块之间的优化。

为了进行全局代码优化,必须在考察基本块之间的相互联系与影响的基础上才能完成。

首先必须进行过程内数据流分析(intraprocedural dataflow analysis),然后编译器将收集的信息分配给各个基本块。

根据这些信息,我们可以建立相应的数据流方程,进而可以生成类似于ud链(引用-定值链)和du链(定值-引用链)这样的标准全局数据流分析结构。

基于这样的数据结构,进行过程内的全局优化工作。

常用的全局优化技术有复写传播(copy propagation) 、常量折叠(constant folding) 、删除全局公共子表达式等。

2.按照机器相关性,现代编译器所使用的优化技术可以分为以下几类:
1)机器相关优化
针对机器语言,依赖于目标机的结构和特点。

例如,寄存器优化,多处理器优化,特殊指令优化等。

2)机器无关优化
针对中间代码,不依赖于目标机的结构和特点。

例如,合并常量优化,消除公共子表达式,代码外提,删除归纳变量,强度削弱和删除无用代码等。

1.3.机器无关优化
本课题只涉及了机器无关优化工作。

那么我们就对机器无关优化作较为详细的讨论。

常用的机器无关优化技术有[2]:
1.代码外提
循环中的代码,要随着循环反复执行,但其中某些运算的结果往往是不变的。

对于这种不变运算,我们可以把它提到循环外。

这样,程序运行的结果保持不变,但程序运行的速度却提高了。

这种优化即即为代码外提。

2.强度削弱
强度削弱是指把程序中执行时间较长的运算替换为执行时间较短的运算。

例如把循环中的乘法运算用递归加法来替换。

进行强度削弱后,循环中可能出现一些新的无用赋值,可以把它们删除。

强度削弱对下标地址变量计算来说,实际上就是实现了下标变量地址的递归计算,对于减小下标地址计算的强度是非常有效的。

3.归纳变量删除(删除无用代码)
归纳变量是指在循环中每次执行增长值固定的变量。

它包括循环控制变量和其它依赖于循环控制变量的变量。

如果循环中对变量I只有唯一的形如I:=I+C
的赋值,且其中C为循环不变量,则称I为循环中的基本归纳变量。

如果I是循环中一基本归纳变量,J在循环中的定值总是可归化为I的同一线性函数,则称J是归纳变量,并称它与I同族。

一个基本归纳变量也是一归纳变量。

删除归纳变量是在强度削弱后进行的。

4.循环展开
循环展开是指针对源程序中的循环结构,编译时在循环次数已知的前提下,通过将循环体重复多次来减少循环转移的开销,同时通过循环体的增大提高循环体内进一步优化的可能性。

循环展开技术虽然能够减少转移开销、提高程序的执行速度,但它同时也增加了程序的空间开销,对cache命中率产生不良的影响。

而且,循环体重复的次数也要视目标机中通用寄存器的个数而定。

如果每次重复都只是简单的复制,那么便会出现寄存器相关的问题,从而大大降低循环展开技术的优化效果。

5.过程内嵌
过程内嵌是指针对源程序中的某些过程调用,找到被调过程的过程体,如果该过程体短小而且没有循环,则将它拷贝到调用处,从而消除过程调用的开销,增大指令调度的可能性。

同循环展开技术的不良影响一样,过程内嵌也大大增加了程序的空间开销,降低了cache的命中率。

6.常量合并
常量合并又称为常数表达式求值(constant expression evaluation),是指在编译时刻就对已知操作数的值为常数的表达式求值,并且用该结果值来替代这部分表达式。

7.常数传播
所谓常数传播是指对于基本块中的某个变量,如果该变量的值始终为一常数,那么就用这个常数值来替代所有表达式中的这个变量。

常数传播不仅为全局范围内进行常量合并优化提供了基础,而且还有助于不可达代码删除优化的进行,因为在测试变量被发现是常数之后,某些代码便会变得不可到达。

8.局部公共子表达式删除
如果表达式E已经被计算过,并且从先前的计算到现在E中所有变量的值没有改变,那么E的这次出现就称为公共子表达式。

对于公共子表达式,没有必要对它们再进行计算,只需将前面计算过的值赋给表达式的结果变量就行了,这种优化方法用在程序基本块之内便称为局部公共子表达式删除。

9.复制传播(复写传播)
形为A:=X的赋值称为复制(copy)。

若用X来替代所有表达式中的变量A,便称为复制传播。

如果变量A的值不再用到的话,则赋值表达式A:=X.便是多余的,可以消除掉。

(上面用红色字体标注的优化方式为实验四要求做的内容)。

相关文档
最新文档