是否有任何實際的性能好處,擔心將vector
s放在堆棧而不是堆上,因爲內部的vector
會將堆放在堆上嗎?將矢量放在堆棧上的好處
回答
如果有的話可以忽略不計。然而,你應該記住的一件事是,實際分配進程比堆棧更慢。 也就是說
vector<T> t;
快於
vector<T>* t = new vector<T>;
由於在堆棧上分配基本上只涉及移動堆棧指針。
所以把所有的生命期問題放在一邊,如果你必須分配大量的載體你可能會建立在那麼小的性能損失上。
但是,如果你有幾個載體然後在我看來將不會有顯着的收益。
我應該提到,根據premature optimization,堆棧和堆分配所帶來的性能提升的擔心失敗。所以,只需選擇適合您需求的產品並使用它即可。它寧願付出努力來專注於優化您的算法。
程序員浪費大量的時間思考,也不必擔心 約,其方案的非關鍵部分的速度,而這些 企圖效率居然有當 調試和維護被認爲是一個強烈的負面影響。我們應該忘記效率的大小,比如97%的時間:不成熟的優化是所有邪惡的根源。然而,我們不應該在 關鍵的3%,通過了我們的機會。「
+1 - 優化決策應基於特徵證據。 – eriknelson 2013-05-01 18:53:55
Re:過早優化:選擇堆棧與堆的主要原因是對象的生命週期。性能是次要的,黑客修復故意錯誤放置的對象的生命週期會使代碼變得脆弱。 – 2013-05-01 18:56:11
我認爲你可以停止使用「微不足道」這個詞,並且有一個完全正確的答案。爲了產生顯着差異而需要分配的矢量數量是不切實際的,每個矢量都必須是空的或幾乎是空的。 – 2013-05-01 19:11:45
理論上,將矢量創建爲局部變量可能會稍快一點,而不是(例如)將矢量指針指定爲局部變量,並且動態分配矢量本身。後者需要額外的間接水平才能獲得您真正關心的數據。
在現實中,差異幾乎總是會是遠遠太小,無法注意或關心。除非您真的需要動態分配它,否則通常需要創建一個向量作爲局部變量,但避免額外間接級別的微觀優化可能是這樣做的原因。保持您的代碼簡單,易於理解和可靠是多更好的原因。
- 1. 在堆或堆棧上的C++矢量?
- 2. 更好的堆棧比擴展矢量
- 3. 將JButton放在堆棧上
- 4. 矢量,堆棧與堆棧(C++)
- 5. 將堆棧中的矢量複製到堆上
- 6. 堆中的矢量與堆棧中的矢量
- 7. 堆棧擴展矢量
- 8. 在堆和堆棧上創建混合矢量對象
- 9. 如何將變量放在Python中的堆棧/上下文中
- 10. 如何在C++中將矢量元素複製到堆棧
- 11. 在堆棧上分配對象的好處?
- 12. 調用堆棧上的異常處理堆棧幀的順序
- 13. 在堆棧上放置64位地址
- 14. Android在堆棧卡上拖放片段
- 15. luaL_dostring什麼都不放在堆棧上?
- 16. 在堆棧上處理對象破壞
- 17. 在圓柱座標中繪製單位矢量的堆棧 - matplotlib
- 18. 將堆棧結構存儲在堆vs棧上
- 19. 堆棧變量
- 20. 示例處理堆棧變量
- 21. 無法訪問堆上的矢量
- 22. 堆棧上的C++存儲保存在堆棧上
- 23. 因素:堆棧上元素的數量
- 24. 堆棧上的局部變量
- 25. 檢查堆棧上的局部變量
- 26. 在C++中,在堆棧或堆上的函數中創建了矢量還是地圖?
- 27. 堆棧變量在走?
- 28. 堆棧向量在R
- 29. JVM堆棧變量
- 30. 初始化向量在堆上的矢量
是的,更容易的內存管理的開發者,你不需要考慮將其刪除。 – Max 2013-05-01 18:23:02
平心而論,他是問」的表現「獲益,而不是方便 – stardust 2013-05-01 18:25:00
可能不是,知道是否有助於提高性能的最好方法是在最接近可能的條件下嘗試實際使用,並在開發完成後再次在實際產品和環境中再次檢查性能。 – selalerer 2013-05-01 18:26:57