2012-08-24 25 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訪問它。