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

时间:2012-08-24 13:11:31

标签: objective-c c

static关键字如何在内部运作?考虑基本定义static variable is initialized only oncerun-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 object中还有一个名为Objective-C的内容吗?如果它与普通物体有什么不同?

2 个答案:

答案 0 :(得分:5)

您的上一个问题表明您在询问本地变量声明中使用static的情况。

  

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

这是特定于实现的。

  

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

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

  

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

运行时只执行一次初始化static本地人是价值初始化的,除非另有说明。

答案 1 :(得分:2)

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

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