当前位置: 首页 > news >正文

【编译原理】第十章 优化

目录

概述

局部优化

1. 基本块及流图    

2. 基本块的DAG表示及其应用

循环优化

1. 删除公共子表达式(多余运算)

2. 复写传播

3. 删除无用代码

4. 代码外提

5. 强度削弱

6. 删除归纳变量

7. 合并已知量

数据流分析


概述

优化对代码进行的变换必须遵守以下原则:

1. 等价原则: 经优化的代码执行结果不变;

2. 有效原则: 优化后确实执行时间短、占用空间少;

3. 合算原则: 以较低的代价,换取较好的优化效果。

优化主要为两类:

中间代码的优化(不依赖硬件)

目标代码的优化(依赖硬件)

局部优化

1. 基本块及流图    

基本块:程序中一顺序执行的语句系列,其中只有一个入口和一个出口,第一个语句为入口,最后一个语句为出口。

        对于给定的一个程序,可以将其划分为一系列的 基本块,分别在块内进行局部优化(基本块内的优化)。

2. 基本块的DAG表示及其应用

循环优化

对循环中的代码可以实行代码外提、强度削弱和 删除归纳变量等优化。

1. 删除公共子表达式(多余运算)

2. 复写传播

3. 删除无用代码

4. 代码外提

        对循环中的有些代码,若它的结果在循环中不变, 可将这些代码提到循环外,以避免循环执行。

5. 强度削弱

6. 删除归纳变量

7. 合并已知量

经前述各种优化处理后,最终的中间代码如下:

数据流分析

http://www.xdnf.cn/news/1051579.html

相关文章:

  • 影视剧学经典系列-梁祝-陶渊明《感士不遇赋并序》
  • Google DeepMind研究:大语言模型(LLMs) 思维链解码(CoT-decoding)方法解析
  • MCP案例 - 数据可视化工具服务器
  • 《从入门到精通:解锁Android Studio的无限可能》
  • 第六章:连接查询优化 - 多表联查不再慢
  • Ubuntu中ESP32使用记录
  • 模拟设计的软件工程项目
  • 软件工程瀑布模型学习指南
  • Vue 3 路由跳转全面指南(Composition API + <script setup>)
  • SpringBoot电脑商城项目--用户注册功能
  • 使用 socat 和 xinetd 将程序绑定到端口运行
  • 电磁场与电磁波篇---梯度散度旋度
  • C#最佳实践:为何应减少方法参数
  • pandas
  • golang-linux环境配置
  • 【工具教程】如何批量识别大量图片的文字并重命名图片,图片文件批量文件识别改名的详细操作步骤和注意事项
  • SpringBoot电脑商城项目--项目分析及搭建
  • 玫瑰动态爱心代码
  • Python•元组集合字符串
  • 基于C#部署YOLOv5目标检测模型核心技术深度解析
  • 分段贝塞尔曲线
  • 基于 pysnmp 的实际业务场景应用案例:网络设备监控与配置系统
  • python蓝色动态线
  • 仿muduo库实现并发服务器
  • 搭建基于 Prometheus、Grafana 和 Alertmanager 的监控告警系统
  • 【计网】导航
  • ​​WSL2 (Ubuntu)​​ 中安装 ​​CUDA 12.9​​ 的详细教程
  • 企业信息技术外包管理制度:如何安全高效管理IT外包服务
  • 【计算机网络】——reactor模式高并发网络服务器设计
  • Celery+fastAPI/Flask实现高性能应用