优化策略详解:编译原理中8.1-8.2中间代码优化与基本块划分

版权申诉
0 下载量 185 浏览量 更新于2024-07-03 收藏 980KB PPT 举报
本资源是关于编译程序原理与实现的一份详细讲解,主要集中在第8章“中间代码优化”。这一章深入探讨了优化在编译过程中的重要性,特别是在生成的中间代码阶段进行优化的原因。优化的目标是为了在最小的成本下提升目标程序的运行效率,编译器设计者会根据需求决定是否以及如何进行优化。 中间代码优化被细分为不同的类别,包括局部优化和非局部优化。局部优化通常发生在基本块级别,例如常量表达式优化,将连续的常量计算合并,如 `v = a * b + c` 可简化为 `v = 11`。公共子表达式优化则通过消除重复计算来节省资源,如 `t = b * c; e = b * c + b * c;` 可简化为 `t = b * c; e = t + t;`。 循环不变量外提是另一种重要的优化技术,它将不会改变循环体执行结果的变量提前计算出来,如将 `while(k < 10) { a[k] = b * c; k = k + 1 }` 转换为 `t = b * c; while(k < 10) { a[k] = t; k = k + 1; }`,从而减少循环内的重复计算。 接着是基本块划分的概念,它是程序执行流程的关键组成部分。基本块是一组顺序执行的语句,每个基本块有一个入口(第一条语句)和一个出口(通常为转移性或赋值四元式)。划分的基本方法包括:以第一条指令作为入口,遇到标号性或转移性四元式时结束当前块并开始新的块,而赋值四元式(特别是变参)的出现也会导致块的结束。 这部分内容涵盖了从中间代码优化的理论基础到实际应用的具体策略,对于理解编译器内部的工作机制和高效代码生成至关重要。通过对这些优化技术的理解,可以提升程序的执行效率,是软件工程和计算机科学领域的重要知识点。