【问题标题】:memory concept for static variables inside the blocks in a program程序块内静态变量的内存概念
【发布时间】:2012-12-23 21:13:41
【问题描述】:

程序中的静态变量在所有执行时间都存在于内存中,而子程序的静态变量是通过推送子程序的激活记录进出程序的函数调用栈,但是:

主程序中块(我的意思是控制结构或任何 {} 块)中的静态变量怎么样?在定义它们的块之外无法访问它们,它们的内存概念如何?

它们是否在整个程序执行过程中都存在于内存中,但在它们的块之外无法访问,或者除了子程序之外的每个块都有激活记录?

【问题讨论】:

标签: memory memory-management


【解决方案1】:

在所有情况下,静态变量都在程序的整个生命周期内分配一次。 (我认为您问题中的“子程序”是指 C 函数。)您的问题特定于所使用的编程语言,所以我将假设 C。

代码块“看到”(或不看到)静态变量的能力是独立的,是编译器的词法范围规则强制执行的虚构。

特别是在 C 中,全局范围、函数范围和块范围内的 static 变量在程序的整个生命周期中每个程序都存储一次。在下面的例子中(至少)在程序启动时会分配 3 个字:

static int globalWord;

int aFunction(void) {
  static int aFunctionPrivateStatic;
} 

int main(void) {
   while (1) {
     static int whilePrivateStatic;
     // ...
   }

   // ...
}

有关更详尽的示例,请参阅 http://en.wikipedia.org/wiki/Static_variable

【讨论】:

  • 好的,但是本地变量的默认存储类是自动的,实际上主变量的存储类也是自动的,但它们在整个执行期间是持久的。
猜你喜欢
  • 2018-03-06
  • 2013-12-15
  • 2013-10-06
  • 1970-01-01
  • 2012-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多