2011-10-22 16 views
0

是有這個之間的性能差異:與堆棧(重新)創建時的性能差異?

int test; 
void Update() 
{ 
    test +=2; 
} 

這樣的:

void Update() 
{ 
    int test; 
    test +=2; 
} 

-

int main() 
{ 
    while(true) 
     Update(); 
} 

我問,因爲第二個代碼是更好的閱讀(你不」需要在Class頭聲明它),所以如果性能不低,我會使用它。

+1

您的測試不一致,因爲測試範圍決定了發生什麼的意思。 –

回答

1

這兩個片段之間的性能差異是非常不可能的,只有分析代碼可以可靠地說明,但是在這裏應該考慮一個重要的功能差異。

如果只需要功能update()裏面你test變量,那麼你必須聲明它裏面的功能。這樣,變量在函數內的範圍有限。這種局部變量的生存期限於它所在的範圍.i.e。在功能體內,直到右大括號}

如果完全想讓你的test變量在函數調用中保持狀態,那麼它可以是函數內部聲明的局部靜態變量。

在函數的外部聲明test使其成爲全局變量。它可以在同一個文件中的任何函數中訪問。它也是一個全局變量,它的生命週期一直延續到程序結束。

+0

謝謝,我知道功能差異,我選擇了一個壞例子;) 順便說一句,如果我使用靜態int;在一個函數中,這在類的實例中是否也是靜態的? – Sapd

+0

@Sapd:在函數內聲明的'static int'變量將在所有對函數進行的調用中共享。是,它將在所有類的實例中維護。 –

0

性能差異,不太可能。這很容易測試,但取決於您的編譯器。檢查輸出組件並做一些基準測試。如果有差異,它可能很小。

但是,有一個主要的功能差異。第二個例子實際上是無用的,因爲test將被重置,每Update。爲了避免這種情況,你可以聲明它爲static int test,但你基本上再次寫了第一個例子。

所以,他們是非常不同的東西,但會有類似的表現。