通过与 Jira 对比,让您更全面了解 PingCode

  • 首页
  • 需求与产品管理
  • 项目管理
  • 测试与缺陷管理
  • 知识管理
  • 效能度量
        • 更多产品

          客户为中心的产品管理工具

          专业的软件研发项目管理工具

          简单易用的团队知识库管理

          可量化的研发效能度量工具

          测试用例维护与计划执行

          以团队为中心的协作沟通

          研发工作流自动化工具

          账号认证与安全管理工具

          Why PingCode
          为什么选择 PingCode ?

          6000+企业信赖之选,为研发团队降本增效

        • 行业解决方案
          先进制造(即将上线)
        • 解决方案1
        • 解决方案2
  • Jira替代方案

25人以下免费

目录

代码优化的目的是什么

代码优化的目的是对程序代码进行等价(指不改变程序的运行结果)变换。程序代码可以是中间代码(如四元式代码),也可以是目标代码。原则上,优化可以在编译的各个阶段进行,但最主要的一类是对中间代码进行优化。

一、代码优化的目的

目的

代码优化的目的是对程序代码进行等价(指不改变程序的运行结果)变换。程序代码可以是中间代码(如四元式代码),也可以是目标代码。原则上,优化可以在编译的各个阶段进行,但最主要的一类是对中间代码进行优化。

编译过程中可进行的优化可按阶段划分:优化可在编译的不同阶段进行,分为中间代码一级和目标代码一级的优化。可按优化涉及的程序范围划分:对同一阶段,分为局部优化,循环优化和全局优化. 进行优化所需要的基础是对代码进行数据流分析和控制流分析。如划分DAG,查找循环,分析变量的定值点和引用点等等。最常用的代码优化技术有删除多余运算,循环不变代码外提,强度削弱,变换循环控制条件,合并已知量与复写传播,以及删除无用赋值等等。

代码优化过程

等价:不改变程序执行效果;

变换:引起程序形式上的变动。

为什么要实施优化

优化程度是编译器的一个重要技术、质量目标;

无法苛求用户对源语言的掌握,编程技巧.编写源程序的优化;

编译程序固有的缺陷:不是面对一个或一类具体问题的程序,而是统一处理该语言的各种源程序,无法尽善尽美。

延伸阅读:

二、循环优化

1.程序流图与循环

控制流程图就是有少数首节点的有向图,用三元组G=(N,E,n0)表示(节点集,边集,首节点)节点集就是基本块集,有向边表示如下:基本块i出口语句不是转向语句或停语句,i与紧随其后的基本块j有有向边。或者i出口转向j入口语句。

2.循环

程序流图里的一个节点序列强连通,任意两个节点都有至少一条通路,它们中有且只有一个入口节点。(从序列外某节点有一条有向边引导它,或他是程序流图的首节点。

3.找循环

必经节点集:从流图首节点出发,到n的任意通路都要经过m,m是n的必经节点,记为mDOMn;流图中结点n的所有必经节点的集合称为节点n的必经结点集,极为D(n)。

DOM的性质:自反性:流图中任意节点a,都有aDOMa。传递性:aDOMb,bDOMc则aDOMc。反对称性:aDOMb,bDOMa,a=b。DOM是一个偏序关系,任何节点n的必经节点集是一个有序集。

必经节点的求法:一定包括自己好吧。。。。。。必经节点集就是前驱节点必经节点集的交集加自己没准。

找回边:假设ab是流图中的一条有向边,如果bDOMa,则ab是流图中的一条回边。已知有向边nd是一条回边,则由它组成的循环就是由结点d、结点n以及有通路到达n但该通路不经过d的所有结点组成的。

4.可规约流图

当且仅当一个流图除去回边后,其余边构成一个无环路流图。

性质:图中任何直观环路都是循环;找到所有回边可以对应找出所有循环;循环或嵌套或不相交(可能有公共入口节点),goto语句不可跳入循环。

以上就是关于代码优化的内容希望对大家有帮助。

相关文章