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

21|加深对栈的理解:实现尾递归和尾调用优化

你好,我是宫文学。
前面几节课,我们在实现生成本地代码的过程中,对汇编语言、栈和栈桢有关的知识点都进行了比较深入的了解。通过这些学习,你应该对程序的运行机制有了更加透彻的理解。
那么今天这节课,作为第一部分起步篇的结尾,我们就来检验一下自己的学习成果吧!具体一点,我们就是要运用我们前面已经学过的知识点,特别是关于栈和栈桢的知识点,来实现两个有用的优化功能,也就是尾递归和尾调用的优化。
这两个优化有助于我们更好地利用栈里的内存空间,也能够提高程序的性能,对于我们后面实现函数式编程特性也具有很重要的意义。另外,这样的练习,也会加深我们对栈和栈桢、对程序的控制流,还有对程序的运行机制的理解。
好了,我们先从尾递归入手吧,说说尾递归是怎么回事,还有它有怎样的运行特点,看看我们为什么需要去优化它。

递归函数和尾递归

学习编程的同学都应该知道,递归是一种重要的思维方式。我们现实世界的很多事物,用递归来表达是非常自然的。在递归的思维里,解决整体的问题和解决局部问题的思路是相同的。
在我们这个课程里,我们学习的语法分析的方法,也采用了递归的思维:我们给一个大程序做语法分析,会分解成给每一个函数、每一条语句做语法分析。不管在哪个颗粒度上,算法的思路都是相同的。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入介绍了栈的运行机制和优化策略,重点讨论了尾递归和尾调用的优化技术。作者首先解释了递归函数可能导致的栈溢出和性能开销问题,然后详细分析了尾递归优化的实现原理,通过将call语句改为jmp指令来复用当前栈桢,从而提高程序性能并减少内存空间的浪费。文章还介绍了尾调用优化的思路和实现方法,强调了优化技术对程序性能的重要性。通过实例和汇编代码分析,读者能够更好地理解栈的运行机制和优化策略。整体而言,本文内容深入浅出,对于想要深入了解栈和编译器优化技术的读者来说,具有很高的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手把手带你写一门编程语言》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(2)

  • 最新
  • 精选
  • 浩仔是程序员
    再次学习
    2024-03-02归属地:广东
  • ifelse
    学习打卡
    2022-09-20归属地:浙江
收起评论
显示
设置
留言
2
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部