You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言调用空递归函数时栈的使用问题

关于C语言递归程序的栈使用问题

先看你提供的递归程序代码:

void func(void)
{
   func();
}

int main()
{
   func();
   return 0;
}

问题1:该程序每次调用func()函数时都会使用栈吗?

通常情况下,每次调用func()都会分配新的栈帧,也就是会使用栈。但存在例外:如果编译器开启了尾递归优化,可能会复用当前栈帧而不分配新的。不过这个程序是无限递归(没有终止条件),很多编译器不会对这类无终止的递归做尾递归优化,所以绝大多数场景下,每次调用都会使用栈。

问题2:如果会使用栈,栈中存储的内容是什么?

栈中存储的是当前函数调用的栈帧,具体包含:

  • 返回地址:即当前func()调用完成后,程序要回到的代码位置(这里就是本次func()调用语句的下一行,但因为是无限递归,永远不会执行到这一步)
  • 栈帧维护信息:比如栈帧指针(对应x86架构的EBP寄存器、x86_64的RBP寄存器的值),用于快速定位栈帧内的内容,这部分取决于编译器的调用约定
  • 由于func()没有参数和局部变量,所以栈帧里不会存储参数或局部变量的值

内容的提问来源于stack exchange,提问作者beparas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 11:09:13