Optimization tail调用优化是以性能/cpu为目标,还是只节省内存?

Optimization tail调用优化是以性能/cpu为目标,还是只节省内存?,optimization,cpu,complexity-theory,tail-recursion,tail-call-optimization,Optimization,Cpu,Complexity Theory,Tail Recursion,Tail Call Optimization,当一个代码经过尾部调用优化时,它在性能/复杂度方面是否优于未优化的代码,消耗的CPU资源是否比未优化的代码少,还是只节省内存而不节省其他资源?最好参考特定的处理器规范,但从总体上看,尾部调用消除会提高性能,因为 没有分配新的堆栈帧 嵌套调用直接重新启动到当前调用的调用方,而不是当前调用,然后才重新启动到原始调用方 更少的内存分配意味着更好地使用CPU缓存 更少的内存分配意味着更好地使用堆栈过大时可能需要分页或加载的主内存 不过,现代处理器可以减少这些操作造成的开销。在现代机器上,节省内存是提

当一个代码经过尾部调用优化时,它在性能/复杂度方面是否优于未优化的代码,消耗的CPU资源是否比未优化的代码少,还是只节省内存而不节省其他资源?

最好参考特定的处理器规范,但从总体上看,尾部调用消除会提高性能,因为

  • 没有分配新的堆栈帧
  • 嵌套调用直接重新启动到当前调用的调用方,而不是当前调用,然后才重新启动到原始调用方
  • 更少的内存分配意味着更好地使用CPU缓存
  • 更少的内存分配意味着更好地使用堆栈过大时可能需要分页或加载的主内存

不过,现代处理器可以减少这些操作造成的开销。

在现代机器上,节省内存是提高性能的最佳方法之一。