手把手带你写一门编程语言
宫文学
北京原点代码 CEO
7235 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 49 讲
起步篇:让一门超简单的语言跑起来 (21讲)
结束语 (1讲)
手把手带你写一门编程语言
15
15
1.0x
00:00/00:00
登录|注册

20|怎么实现一个更好的寄存器分配算法:实现篇

你好,我是宫文学。
在上一节课,我们已经介绍了寄存器分配算法的原理。不过呢,我们这门课,不是停留在对原理的理解上就够了,还要把它具体实现出来才行。在实现的过程中,你会发现有不少实际的具体问题要去解决。而你一旦解决好了它们,你对寄存器分配相关原理的理解也会变得更加通透和深入。
所以,今天这一节课,我就会带你具体实现寄存器分配算法。在这个过程中,你会解决这些具体的技术问题:
首先,我们会了解如何基于我们现在的 LIR 来具体实现变量活跃性分析。特别是,当程序中存在多个基本块的时候,分析算法该如何设计。
第二,我们也会学习到在实现线性扫描算法中的一些技术点,包括如何分配寄存器、在调用函数时如何保存 Caller 需要保护的寄存器,以及如何正确的维护栈桢。
解决了这些问题之后,我们会对我们的语言再做一次性能测试,看看这次性能的提升有多大。那么接下来,就让我们先看看实现变量活跃性分析,需要考虑哪些技术细节吧。

实现变量活跃性分析

我们先来总结一下,在实现变量活跃性分析的时候,我们会遇到哪几个技术点。我们一般要考虑如何保存变量活跃性分析的结果、如何表达变量的定义,以及如何基于 CFG 来做变量活跃性分析这三个方面。
现在我们就一一来分析一下。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手把手带你写一门编程语言》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(4)

  • 最新
  • 精选
  • chris
    老师的这个LivenessAnalyzer算法其实是简化的了, 更好理解但效率更低. 更高效的算法应该先计算每个基本块的gen集合(基本块中使用前未定义的变量集合)和kill集合(基本块中定义的变量集合), 然后利用" liveout等于CFG后继基本块livein的并集", 和 livein = liveout - kill + gen这两个公式计算不动点. 这个算法就不需要每次都重新分析一遍基本块
    1
    2
  • ifelse
    学习打卡
    归属地:浙江
  • 奋斗的蜗牛
    给大神跪倒,佩服得五体投地!
  • 奋斗的蜗牛
    实在是太强了,各种复杂的理论,能讲得这么清楚!!
收起评论
显示
设置
留言
4
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部