静态变量概念“C”

0 c

在我阅读了静态变量之后,有些事情让我感到困惑。我们可以说关键字 static 的作用是将变量的生命周期延长到程序的生命周期,因为变量的生命周期就是它存在的时间段。

我的问题是:

  1. 里面到底发生了什么?
  2. 内存是专门为这个变量分配的,还是一种指针?

Ste*_*mit 5

根据计算方式,在传统的内存架构中,通常最多有五个不同的位置来存储 C 程序使用的数据:

  1. 在堆栈上。
  2. 在初始化的数据段中。
  3. 在未初始化的数据段(“bss”)中。
  4. 在代码段中。
  5. 在堆里。

声明为函数本地的变量(具有“自动”存储持续时间的变量)存储在堆栈上的 #1 中。

全局变量(在函数外部声明的变量)存储在 2、3 或 4 中,具体取决于它们是否已初始化、未初始化(意味着它们默认为 0)或const。这些变量具有“静态”持续时间。

而且由于静态局部变量具有静态持续时间,因此它们也存储在 2、3 或 4 中。

为了完整起见,我提到了#5“堆”,但是按照惯例声明的变量不会存储在那里。

另请参见C 中静态全局变量和非静态全局变量之间的区别