调用递归函数时如何分配内存? 一个函数有自己分配的内存。 调用它时,参数(不是引用传递的参数)和变量获取内存。 因此,当从它的体内再次调用该函数时,如何将内存分配给第二个调用的变量和参数?

===============>>#1 票数:9 已采纳

递归函数与任何其他函数没有区别 - 通过将堆栈指针推进到足以考虑其大小总和(加上对齐所需的任何填充),将自动局部变量分配为单个块。

每个递归调用以这种方式推送一个新的堆栈帧,然后在它返回时弹出它。 如果递归未能达到基本情况,则堆栈将很快耗尽,从而导致同名Stack Overflow崩溃。

===============>>#2 票数:1

递归调用函数就像任何其他函数一样。 因此,内存的分配方式与调用任何常规函数的方式相同。

===============>>#3 票数:1

它与调用任何其他函数相同。 变量(不是引用传递的变量)在堆栈上分配。 当函数开始返回时(即达到基本情况),堆栈将按照每次嵌套递归调用推送到堆栈的顺序弹出。

这个youtube视频非常好地解释了递归函数的调用堆栈: https//www.youtube.com/watch?v = k0bb7UYy0pY

===============>>#4 票数:1

当一个函数(如果func1调用)调用另一个函数(称之为func2 )时,执行func2所需的数据被推送到堆栈。 对于递归函数,这不会改变(当func2func1 )。

如果递归函数被递归调用10次,则将有10堆栈帧,每个堆栈帧对应于函数的一次调用。

===============>>#5 票数:1

调用函数时,必要的参数被压入堆栈。 当一个函数完成它的任务时,将跳出参数并恢复程序计数器。

递归函数没有例外。

===============>>#6 票数:1

函数参数和局部变量在堆栈上分配。 它们形成了所谓的堆叠框架 当递归调用函数时,为函数的每个递归调用分配堆栈帧。

例如,如果void f()被递归调用三次。

// Assume stack grows upwards
stack frame #3 <== the most recent call
stack frame #2
stack frame #1

===============>>#7 票数:1

自动变量的内存在堆栈上分配。 当你调用另一个函数(递归self或其他函数)时,到目前为止堆栈帧仍处于它们的状态,并且我们在堆栈上分配更多的内存(让我们这样说),以提供这个新函数的局部变量。 当函数结束时,新的堆栈帧被丢弃,我们将恢复到之前的(calee)堆栈帧。

您可以使用您选择的任何调试器来更好地理解事物。 如果您不明白,请询问。

===============>>#8 票数:1

Recurtion使用堆栈内存来执行

看看下面的例子

void rev(Node* head){
if(head==NULL) return;
head=head->next;
rev(head);
cout<<head->data<<endl;}

让我们看一下Stack Segment的递归。

NODE1 -> NODE2->NULL其中NODE1和NODE2是结构对象。

你的功能是:

Call to rev(NODE1)
Check if it is NULL
Point to next NODE i.e. NODE2

Call to rev(NODE2)

Check if It is NULL
Point to next NODE i.e. NULL

Call to rev(NULL)

Check if It is NULL
Pointer will be returned With head = NULL

希望这会帮助你。

===============>>#9 票数:1

您编写的函数(代码行)存储在文本段中,当调用它时,它在堆栈内存中分配一个帧,变量的内存(除了静态)也在给定帧的堆栈中分配。

递归函数与正常函数没有什么不同,它被调用n次。 所以它的存储器(帧)也在堆栈上分配n次。

===============>>#10 票数:1

调用函数时,其他函数状态的参数保存在Stack上。

函数调用期间构造的堆栈帧包含以下内容:

  • 功能参数。
  • 函数的返回地址。
  • 帧指针。
  • 异常处理程序框架。
  • 本地声明的变量。
  • 缓冲。
  • Callee保存寄存器。

===============>>#11 票数:0

使用后需要释放内存。

这是一个示例程序,说明了这一点。

http://forums.devx.com/showthread.php?145311-Free-memory-or-garbage-in-recursion-program

  ask by Kanishk Dudeja translate from so

未解决问题?本站智能推荐: