Recursion 堆上本机堆栈与虚拟堆栈的性能

Recursion 堆上本机堆栈与虚拟堆栈的性能,recursion,heap-memory,stack-memory,Recursion,Heap Memory,Stack Memory,在进行递归计算时,最简单的解决方案通常使用基于进程本机堆栈的函数级递归 然而,有时存储在每个递归中的信息非常小(比如说,一些字节)。函数调用和本机堆栈帧(例如,由C标准运行时维护)的开销可能很高。另一方面,许多堆栈操作甚至优化到CPU硬件级别。当然,在堆上维护自制堆栈需要额外的操作 有没有什么通用规则可以用来决定何时使用本机堆栈可以更快地运行递归,何时使用循环和基于堆的自制堆栈(例如在C情况下使用数组)更好?在我看来,似乎没有这样的规则。本机堆栈和虚拟堆栈之间不太可能存在显著差异,因为在这两种情

在进行递归计算时,最简单的解决方案通常使用基于进程本机堆栈的函数级递归

然而,有时存储在每个递归中的信息非常小(比如说,一些字节)。函数调用和本机堆栈帧(例如,由C标准运行时维护)的开销可能很高。另一方面,许多堆栈操作甚至优化到CPU硬件级别。当然,在堆上维护自制堆栈需要额外的操作


有没有什么通用规则可以用来决定何时使用本机堆栈可以更快地运行递归,何时使用循环和基于堆的自制堆栈(例如在C情况下使用数组)更好?

在我看来,似乎没有这样的规则。本机堆栈和虚拟堆栈之间不太可能存在显著差异,因为在这两种情况下,分配/解除分配都是指向堆栈顶部(即寄存器顶部)的指针的添加/删除

如果您考虑编写和理解代码的便利性,那么本机堆栈看起来更好,因为代码更容易。但是,在某些情况下,有必要自行实现。F.e.如果堆栈上的对象非常大,或者如果算法需要两个或更多堆栈

否则,我更喜欢本机堆栈