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

为何两个函数中局部变量x和y的内存地址相同?

你的猜测完全合理,这是栈帧复用的典型表现

你观察到的现象本质是栈内存的复用机制:

  • 程序运行时,函数的局部变量、参数、返回地址等数据会被存放在栈帧里,栈帧是栈内存上的一块连续区域。
  • 当foo1执行完毕返回main后,它的栈帧并不会被主动清空,只是栈指针会回退到调用foo1之前的位置,这块内存会被标记为可复用状态。
  • 接下来调用foo2时,系统会直接把空闲的栈空间分配给foo2的局部变量,所以y的地址就和之前x的地址完全一致。

补充几个关键点:

  1. 这种行为是大多数操作系统和编译器的通用实现,但C语言标准并没有强制要求——标准只规定局部变量的生命周期从函数进入到退出,至于内存是否复用,由具体实现决定。
  2. 如果把代码改成foo1内部调用foo2,两个函数的栈帧会同时存在于栈上,此时x和y的地址就会不同。
  3. 栈内存复用是一种高效的内存管理方式,避免了频繁分配释放内存的开销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 19:49:51