在进行递归计算时,最简单的解决方案通常使用基于进程的本机堆栈的函数级递归。
但是,有时每次递归中存储的信息都很小(比如说,有些字节)。函数调用和本机堆栈帧的开销(例如,由C标准运行时维护)可能很高。另一方面,许多堆栈操作甚至优化到CPU硬件级别。在堆上维护自制堆栈当然需要额外的操作。
是否有任何通用规则可用于决定何时使用本机堆栈更快地运行递归,以及何时使用循环和基于自制堆的堆栈更好(例如,在C情况下使用数组) ?
答案 0 :(得分:0)
在我看来,没有这样的规则。本机和虚拟堆栈之间不太可能存在显着差异,因为在两种情况下,分配/解除分配是指向堆栈顶部的指针的添加/子,即实际上是寄存器的。 / p>
如果您考虑编写和理解代码的便利性,本机堆栈看起来更好,导致代码更容易。但是,有些情况下需要执行自己的实现。 F.E.如果堆栈上的对象非常大,或者算法需要两个或更多堆栈。
否则我更喜欢本机堆栈。