2013-05-01 27 views
-3

是否有任何實際的性能好處,擔心將vector s放在堆棧而不是堆上,因爲內部的vector會將堆放在堆上嗎?將矢量放在堆棧上的好處

+4

是的,更容易的內存管理的開發者,你不需要考慮將其刪除。 – Max 2013-05-01 18:23:02

+0

平心而論,他是問」的表現「獲益,而不是方便 – stardust 2013-05-01 18:25:00

+0

可能不是,知道是否有助於提高性能的最好方法是在最接近可能的條件下嘗試實際使用,並在開發完成後再次在實際產品和環境中再次檢查性能。 – selalerer 2013-05-01 18:26:57

回答

3

如果有的話可以忽略不計。然而,你應該記住的一件事是,實際分配進程比堆棧更慢。 也就是說

vector<T> t; 

快於

vector<T>* t = new vector<T>; 

由於在堆棧上分配基本上只涉及移動堆棧指針。

所以把所有的生命期問題放在一邊,如果你必須分配大量的載體你可能會建立在那麼小的性能損失上。

但是,如果你有幾個載體然後在我看來將不會有顯着的收益。

我應該提到,根據premature optimization,堆棧和堆分配所帶來的性能提升的擔心失敗。所以,只需選擇適合您需求的產品並使用它即可。它寧願付出努力來專注於優化您的算法。

程序員浪費大量的時間思考,也不必擔心 約,其方案的非關鍵部分的速度,而這些 企圖效率居然有當 調試和維護被認爲是一個強烈的負面影響。我們應該忘記效率的大小,比如97%的時間:不成熟的優化是所有邪惡的根源。然而,我們不應該在 關鍵的3%,通過了我們的機會。「

+0

+1 - 優化決策應基於特徵證據。 – eriknelson 2013-05-01 18:53:55

+1

Re:過早優化:選擇堆棧與堆的主要原因是對象的生命週期。性能是次要的,黑客修復故意錯誤放置的對象的生命週期會使代碼變得脆弱。 – 2013-05-01 18:56:11

+0

我認爲你可以停止使用「微不足道」這個詞,並且有一個完全正確的答案。爲了產生顯着差異而需要分配的矢量數量是不切實際的,每個矢量都必須是空的或幾乎是空的。 – 2013-05-01 19:11:45

1

理論上,將矢量創建爲局部變量可能會稍快一點,而不是(例如)將矢量指針指定爲局部變量,並且動態分配矢量本身。後者需要額外的間接水平才能獲得您真正關心的數據。

在現實中,差異幾乎總是會是遠遠太小,無法注意或關心。除非您真的需要動態分配它,否則通常需要創建一個向量作爲局部變量,但避免額外間接級別的微觀優化可能是這樣做的原因。保持您的代碼簡單,易於理解和可靠是更好的原因。