0

当我学习计算机科学时,由于函数调用开销以及如何转换为更有效的东西,有人讨论了递归的成本。例如,要迭代,参见http://stackoverflow.com/questions/159590/way-to-go-from-recursion-to-iteration?rq=1,或者将自然​​递归算法变成迭代算法:例如运行算法自下而上而不是自上而下。

64 位架构的有趣之处之一是支持使用寄存器来回传递更多参数。引用Agner Fog

使用寄存器将参数传输到函数并接收返回值比将这些值存储在堆栈上更有效……在 64 位系统中,使用寄存器进行参数传输是标准化的。如果返回的对象适合为此目的分配的寄存器,则所有系统都使用寄存器作为返回值

这是否意味着我不需要太担心在 64 位架构上递归函数调用的成本?

4

2 回答 2

1

即使参数是在寄存器中传递的,函数在递归时也需要在堆栈上保存一些状态。如果该状态中的任何一个是指针,则您的空间需求增加了一倍。这可能会使给定堆栈大小的最大递归深度减半。

于 2013-09-19T15:39:58.693 回答
0

在寄存器中传递参数不会改变算法的内存消耗属性,它仍然需要相同的堆栈空间。调用约定修复了用于每个位置参数的寄存器,显然不能使用相同的寄存器将不同的值传递到调用堆栈的更深处,因此编译器必须将其溢出到内存中。

于 2013-09-19T15:45:32.063 回答