2012-08-24 26 views
0

static关键字在内部是如何工作的?考虑到基地定义static variable is initialized only oncerun-timecompile时间如何根据执行流程来解释它?考虑代码片段:static关键字如何在内部工作?

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

线static int count=0;只执行一次,并且在迭代i=0是我能想出的最好说明。它是正确的还是以其他方式工作?

而内存中的哪个位置是存储的静态变量stackheap

Objective-C还有什么叫static object?如果它与普通对象有什么不同?

+10

'static'具有*所以*许多不同的含义,您必须提供更完整的代码示例。 –

+0

另外,“编译器在第一次遇到后跳过它”是什么意思?这对我来说没有意义。 –

+0

在网上有很多的教程,你可以参考,只是谷歌 - http://msdn.microsoft.com/en-us/library/s1sb61xd.aspx – aravind

回答

5

你最后的问题表明你问的是在局部变量声明中使用static的情况。

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

这是特定于实现的。

这是否与分配的内存有关?

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

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

这是运行时,只执行一次初始化。除非另有说明,否则当地人都会进行价值初始化。

2

这意味着编译器和内存分配的方式取决于它在哪里。在一个函数内部,变量被分配在堆栈上,并在函数的生命期间持久化,并且在调用之间不保留该值。在声明static时,变量分配给全局变量(通常是.bss),并且该值在函数调用之间保持不变,但变量的作用域仅适用于该函数。

static用于函数外部的全局声明时,变量只在该模块中有作用域。那就是如果你在module1.cpp中声明一个静态变量,那么module2.cpp就不能用extern访问它。