C 递归中的内存分配是如何分配的
我的问题是在函数调用期间如何在堆栈上分配变量,如果C 递归中的内存分配是如何分配的,c,recursion,compilation,C,Recursion,Compilation,我的问题是在函数调用期间如何在堆栈上分配变量,如果x=5-显然返回的是5*fact(4),但是如何将该5*fact(4)推送到堆栈上以后如何解析其值,即可以推送简单值(不是变量)并检索其值,但是编译器如何处理事实(4)。 有人能详细解释一下编译器是如何实现这个递归过程的吗?在返回5*事实(4)之前,调用事实(4)并在新的堆栈框架上求值。当对fact(4)的调用完成时,它将其返回值放置在fact(5)堆栈帧可以到达的位置(这可能是堆栈或寄存器中),并使用它来计算自己的返回值。因此,完成评估的顺序将
x=5
-显然返回的是5*fact(4)
,但是如何将该5*fact(4)
推送到堆栈上以后如何解析其值,即可以推送简单值(不是变量)并检索其值,但是编译器如何处理事实(4)。
有人能详细解释一下编译器是如何实现这个递归过程的吗?在返回5*事实(4)
之前,调用事实(4)并在新的堆栈框架上求值。当对fact(4)
的调用完成时,它将其返回值放置在fact(5)
堆栈帧可以到达的位置(这可能是堆栈或寄存器中),并使用它来计算自己的返回值。因此,完成评估的顺序将是事实(1)
,事实(2)
,…,事实(4)
,事实(5)
。每个将其返回值放置在下一个可以检索并用于计算其自身返回值的位置。在返回5*事实(4)
之前,事实(4)
在新的堆栈框架上被调用和计算。当对fact(4)
的调用完成时,它将其返回值放置在fact(5)
堆栈帧可以到达的位置(这可能是堆栈或寄存器中),并使用它来计算自己的返回值。因此,完成评估的顺序将是事实(1)
,事实(2)
,…,事实(4)
,事实(5)
。每个将其返回值放置在下一个可以检索并用于计算其自身返回值的位置。在返回5*事实(4)
之前,事实(4)
在新的堆栈框架上被调用和计算。当对fact(4)
的调用完成时,它将其返回值放置在fact(5)
堆栈帧可以到达的位置(这可能是堆栈或寄存器中),并使用它来计算自己的返回值。因此,完成评估的顺序将是事实(1)
,事实(2)
,…,事实(4)
,事实(5)
。每个将其返回值放置在下一个可以检索并用于计算其自身返回值的位置。在返回5*事实(4)
之前,事实(4)
在新的堆栈框架上被调用和计算。当对fact(4)
的调用完成时,它将其返回值放置在fact(5)
堆栈帧可以到达的位置(这可能是堆栈或寄存器中),并使用它来计算自己的返回值。因此,完成评估的顺序将是事实(1)
,事实(2)
,…,事实(4)
,事实(5)
。每个都将其返回值放置在下一个可以检索它并用于计算其自己的返回值的位置
int fact(int x)
{
if (x == 1)
return 1;
else
return (x * fact(x-1));
}