1 tail call

在函数f中调用函数b,如果这个调用是函数f中执行的最后一条指令,那么这个调用就称为tail call。

例子:

int foo(float a, float b)

{

...

return bar(a/2)

}

不是tail call的例子:

int foo(float a, float b)

{

....

c = bar(a/2)

}

这里最后一条指令是对c进行赋值,而不是调用bar函数。

2 tail recursive call

如果一个tail call中,函数f和函数b是同一个函数,那么这个call就是tail recursive call。

3 proper tail call

在tail call基础上限制条件:

f调用b时,如果函数f的栈可以释放的话,这是一个proper tail call。

4 sibling call

首先这应该时一个proper tail call。

然后还有限制条件:

第一,b的参数所占用的空间不能比f占的空间大。

第二,f和b的返回类型是一样的。

5 汇编指令call和jump

jump指令只是修改了IP,然后直接跳转到该条指令执行,它是不管栈的。

call指令会先将当前的IP入栈,然后修改IP,然后跳转,执行完之后再IP出栈,跳转回来。

最新文章

  1. [APUE]文件和目录(下)
  2. apache2.4 绿色版环境配置。
  3. Questa Functional Verification-autocheck
  4. Check if KeyValuePair exists with LINQ's FirstOrDefault
  5. chrome:// 的秘密!!一些有用的命令!
  6. Google Java 风格 阅读随笔
  7. 20M宽带的网速等价于多少?
  8. C语言经典程序190例
  9. Xcode工程使用CocoaPods管理第三方库新建工程时出现异常
  10. How to install vim on linux
  11. yii2.0自带验证码使用
  12. Spring_Spring与AOP_AspectJ基于注解的AOP实现
  13. 在Service中抛出异常事务未回滚问题分析与解决
  14. 201621123031 《Java程序设计》第3周学习总结
  15. Frame Interpolation
  16. eclipse中创建DataBase Connections
  17. python os.path.splitext()
  18. C++.【转】C++数值类型与string的相互转换
  19. 树链剖分+线段树+离线(广州网选赛第八题hdu5029)
  20. SQL中減少日志文件大小

热门文章

  1. C# WebService 的缓存机制
  2. Android实战简易教程-第四十九枪(两种方式实现网络图片异步加载)
  3. BZOJ 4823 Luogu P3756 老C的方块 染色+最小割
  4. UVa 548 树(已知其中两种遍历, 还原树)
  5. jQuery调用WCF 说明
  6. 2014-4-5安装python以及基础知识
  7. 解决idea创建ssm项目找不到mybatis的mapper的xml文件问题
  8. 九度oj 题目1063:整数和
  9. Automation 的 ReportFlow
  10. [HAOI2011]Problem b 题解