0

static关键字在内部如何工作?考虑基本定义,或时间static variable is initialized only once如何根据执行流程解释它?考虑代码片段:run-timecompile

void function()
   {
      static int count=0;
      count++;
   }
main()
    {
       for(int i=0;i<=10;i++)
          function();
    }

该行 static int count=0;仅执行一次,并且迭代i=0中是我能想到的最佳解释。它是正确的还是以其他方式起作用?

静态变量存储在内存中的哪个stack位置heap

还有什么叫static objectinObjective-C吗?如果有它与普通物体有什么不同?

4

2 回答 2

5

您的最后一个问题表明您在询问static局部变量声明中使用的情况。

static 关键字在内部是如何工作的?

这是特定于实现的。

这与分配的内存有什么关系吗?

是的,用声明的本地人static驻留在静态存储中。

编译器/运行时是否在第一次遇到后跳过它?

它是只执行一次初始化的运行时。static除非另有说明,否则局部变量是值初始化的。

于 2012-08-24T13:16:56.567 回答
2

它对编译器和内存分配方式(取决于它的位置)意味着什么。在函数内部,变量在堆栈上分配并在函数的生命周期内持续存在,并且在调用之间不保留值。通过static声明,变量分配在分配全局变量的位置(通常是 .bss),并且值在函数调用之间保持不变,但变量的范围仅适用于该函数。

static用于函数外部的全局声明时,该变量仅在该模块中具有作用域。也就是说,如果您在 module1.cpp 中声明了一个静态变量,那么 module2.cpp 就无法使用 extern 访问它。

于 2012-08-24T13:18:56.103 回答