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());