国外精选视频:编译原理入门4
作者:互联网
中间代码
TAC
三位址码是很多编译器都在用的中间表达形式
因为三位址码不特定于某台机器,中间代码的生成可以被认为是前端任务
抛开语言,我们来谈3地址码
对于三位址码,每一条赋值指令的右侧只能有一个操作符,总共最多有三个地址(等号右侧只能有一个操作符,比如t1=y+z,这里t1,y,z都是地址,它们指向了地址对应的内存数据)
三位址码指令依赖于符号标签来改变控制流程
三位址码简化了嵌套的控制流图
反向修补:
编译器只需要通过遍历一次源码,就能生成三位指令序列
在最后机器码生成这一步之前,编译器可能会将三位地址码拆分为基本块
基本块是由那些始终放在一起执行的指令所组成的序列
基本块也被允许编译器去分析并改进程序中的流程控制,例如,可以从三位址码中消除多余的跳转指令
当最终生成二进制机器代码时,基本块优化可以让寄存器分配和将变量分配给寄存器更容易
对于一个程序的性能而言,一般讲常用的放在cpu,不常用的放在主页
变化1
变化2
变化3
这样他们跳转的是基本块而不是标签或者行号
这很关键,因为现在可以通过改变基本块内指令的顺序来尝试优化代码
Bsic Block Optimisation
复写传播
常数折叠
标签:视频,入门,编译器,生成,编译,基本块,指令,三位,地址码 来源: https://blog.csdn.net/weixin_44522477/article/details/112062257