程序块中静态变量的内存概念

时间:2013-01-09 16:26:50

标签: memory memory-management

程序中的静态变量存在于内存中,用于执行所有执行时间,同时创建子程序的静态变量(通过调用子程序)并销毁(通过终止子程序),这是通过推送子程序完成的。子程序的激活记录到程序的函数调用堆栈中并将其弹出,但是:

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

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

1 个答案:

答案 0 :(得分:0)

在所有情况下,静态变量在程序的生命周期内分配一次。 (我认为你的问题中的“子程序”是指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