尾调用

作者: 呵呵_e03d | 来源:发表于2018-02-13 14:38 被阅读0次

1.什么是调用帧?

我们知道函数调用会在内存生成一个“调用记录”,又称“调用帧”,保存调用位置和内部变量等信息。如果在函数A内部又调用函数B,那么在A的调用记录上方,还会形成一个B的调用记录。等到B运行结束,将结果返回给A,B的调用记录才会消失。如果函数B内部还有个函数C,那就还有个C的调用记录,以此类推。所有的调用记录,就形成了一个“调用栈”。

2.什么是尾调用?

指某个函数的最后一步是调用另一个函数。尾调用和其他调用不同,就在于它的特殊的调用位置。

3.什么是尾调用优化?

尾调用因为是函数的最后一步,所以不需要保留外层函数的调用记录,因为调用位置、内部变量等信息都不会再用到了,只要直接用内层函数的调用记录,取代外层函数的调用记录即可。

大大节省内存,防止栈溢出。

4.“尾调用”的应用。

“递归”即函数自己调用自己,非常消耗内存,且保存了大量的调用记录,很容易造成“栈溢出”。“尾调用”由于只保存一个调用记录,所以永远不会发生“栈溢出”。

objc_sendMsg()调用OC对象方法。

【参考资料】(https://kb.cnblogs.com/page/518771)

相关文章

  • 什么是尾调用?什么是尾递归?尾调用的优化?尾递归优化?

    尾调用优化 尾递归(尾调用优化)

  • 尾调用 & 尾递归 & 尾调用优化

    参考 递归和栈帧的调用原理[https://blog.csdn.net/poiuyds/article/detai...

  • 尾调用和尾调用递归

    来自于阮一峰[https://www.ruanyifeng.com/] # ECMAScript 6 入门[ht...

  • 尾调用

    1.什么是调用帧? 我们知道函数调用会在内存生成一个“调用记录”,又称“调用帧”,保存调用位置和内部变量等信息。如...

  • 尾调用

    在很多时候,递归算法能够解决很多问题,但是在以前它是一种以空间换取性能的办法,如果改成循环,往往理解起来会很困难,...

  • 尾调用

    什么是尾调用 尾调用(Tail call)是函数式编程中的一个重要概念,本身非常简单,就是指某个函数的最后一步是调...

  • 尾递归优化

    尾调用 尾调用指某个函数的最后一步是调用另一个函数。 尾调用不一定出现在函数尾部,只要是最后一步操作即可。 尾调用...

  • 尾调用和尾递归

    尾调用 1. 定义 尾调用是函数式编程中一个很重要的概念,当一个函数执行时的最后一个步骤是返回另一个函数的调用,这...

  • 尾调用,尾递归优化

    函数调用会在内存形成一个“调用记录”,又称“调用帧”(call frame),保存调用位置和内部变量等信息。如果在...

  • 尾调用和尾递归

    ES6 有两个新的东西,前端面试的时候偶尔会问道。之前也有在阮一峰的书上看过几次,但是没有统一归纳学习,今天归纳了...

网友评论

      本文标题:尾调用

      本文链接:https://www.haomeiwen.com/subject/ykvjtftx.html