2016-06-09 218 views
0

我正在使用C++與QT 5.6。我有2款簡單的控制檯應用程序如下:變量是否會影響性能?

//First style 

qstring x = 「Hi!」; 

void func() 
{ 
     QTextStream(stdout) << x; 
} 

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

//Second style 

void func() 
{ 
     QTextStream(stdout) << 「Hi!」; 
} 

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

這將強調出CPU多,因此具有較低的性能可能不會有很大的區別,但是當我們將此大規模,如服務器,其中每2秒建立一次連接就會產生類似於上面循環的情況,並且具有多個變量(但不是相同的變量和數據),資源利用率稍低一點可能導致性能提高,並且資源利用率較低。因此,使用變量可以提高性能,但我將在函數中只使用一次該變量,雖然該函數將被重複調用,或者將使用變量會減慢程序的運行速度,因爲它必須重複檢查內存的「x 「存儲然後檢索數據?

編輯1:

我不會在我的代碼再次使用的變量,我們可以認爲,沒有編譯器優化。 @DrDonut你給的鏈接中的答案也沒有回答是$array === (array) $arrayis_array($array)更快,即它是一個微優化,我也問第二種方式是微優化還是會損害性能。

+3

1)編譯器是比你想象的更聰明 - 在上述情況下,特別是如果你使用'QString的常量x',相同的代碼很可能產生。 2)現在不要擔心表現。 3)如果你必須,在測試性能之前,先試着猜測什麼會更好。 –

+0

沒關係。 –

+0

在現實生活中,您沒有硬編碼字符串的奢侈品,您總是需要使用變量來更改數據。但是,您可以爲'QTextStream(stdout)'創建一個變量,以避免每次都構建它。 –

回答

5

你的例子是壞的,因爲可能的編譯器優化,因爲它不清楚你會在不同的地方使用這個變量,或者它只是一個測試代碼將被拋出。

但一般來說,你是在錯誤的方式進行優化。沒有意義優化單個變量或單個函數。你不應該猜測你的程序在哪裏花費時間,你應該首先按照它的工作方式編寫程序並且看起來沒問題。

程序運行後,如果你發現它的性能不好,你應該搜索瓶頸 - 程序花費很多時間的地方。它們可以在分析器或調試器的幫助下找到,而不是通過猜測。

當您找到它們時,您需要優化這些關鍵位置。

閱讀premature optimization