C/C++ 中的静态变量存储在哪里?


静态变量是在程序运行期间保留在内存中的变量,即它们的生存期是整个程序运行期间。这与自动变量不同,自动变量只在函数运行时保留在内存中,并在函数结束后被销毁。

静态变量存储在内存的数据段中。数据段是程序虚拟地址空间的一部分。

所有未显式初始化或初始化为零的静态变量都存储在未初始化数据段(也称为 BSS 段)中。相比之下,已初始化的静态变量存储在已初始化数据段中。

示例如下:

static int x = 5;
static int y;

The static variable x is stored in the initialized data segment and the static variable y is stored in the BSS segment.

演示 C 语言中静态变量的程序如下:

示例

 在线演示

#include<stdio.h>
int func(){
   static int i = 4 ;
   i++;
   return i;
}

int main(){
   printf("%d\n", func());
   printf("%d\n", func());
   printf("%d\n", func());
   printf("%d\n", func());
   printf("%d\n", func());
   printf("%d\n", func());

   return 0;
}

上述程序的输出如下:

5
6
7
8
9
10

现在让我们理解上述程序。

在函数 func() 中,i 是一个初始化为 4 的静态变量。因此它存储在已初始化数据段中。然后 i 自增并返回其值。显示此代码片段如下:

int func(){
   static int i = 4 ;
   i++;
   return i;
}

在 main() 函数中,func() 函数被调用 6 次,并返回 i 的值,该值被打印出来。由于 i 是静态变量,它在程序运行期间保留在内存中,并提供一致的值。显示此代码片段如下:

printf("%d\n", func());
printf("%d\n", func());
printf("%d\n", func());
printf("%d\n", func());
printf("%d\n", func());
printf("%d\n", func());

更新于:2020年6月26日

10K+ 次浏览

启动您的 职业生涯

完成课程获得认证

开始学习
广告