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

函数内的局部static变量是存储在data segment还是stack中?

C语言函数内局部static变量的存储位置

问题说明

我们需要明确:函数内部定义的局部static变量,是存储在数据段(data segment)中还是栈(stack)中?以下面的C语言代码作为示例:

#include <stdio.h>
 
void f (void)
{
    static int count = 0;   // static 变量   
    int i = 0;              // 自动变量
    printf("%d %d\n", i++, count++);
}
 
int main(void)
{
    for (int ndx=0; ndx<10; ++ndx)
        f();
}

结论

上述代码中的count变量存储在*数据段(Data segment)*中。

存储规则对比

  • 所有被static修饰的变量(包括函数内部定义的局部static变量),默认都会存储在数据段中,生命周期和整个程序的运行周期一致,不会随着所属函数调用结束而被销毁,所以上述代码中count的值会随着10次f()调用从0逐步累加至9。
  • 没有特殊修饰的普通局部变量(比如示例中的i)属于自动变量,存储在栈上,所属函数每次调用时会重新创建、初始化,调用结束后就会被回收,因此每次调用f()打印的i值始终为0。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 13:24:01