亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

哪個更快:堆棧分配還是堆分配

哪個更快:堆棧分配還是堆分配

C++
呼啦一陣風 2019-07-03 11:08:48
這個問題聽起來可能相當初級,但這是我與另一個與我一起工作的開發人員進行的一場辯論。我注意的是在可能的地方堆疊分配東西,而不是堆分配它們。他跟我說話,看著我,說沒有必要,因為他們的表現是一樣的明智。我一直有這樣的印象:增加堆棧的時間是固定的,堆分配的性能取決于堆分配的當前復雜性(找到合適大小的漏洞)和去分配(折疊漏洞以減少碎片,因為如果我沒有弄錯的話,許多標準庫實現需要時間在刪除過程中做到這一點)。在我看來,這可能是非常依賴于編譯器的。特別是對于這個項目,我使用的是都會的編譯器PPC建筑。對這種組合的洞察力將是最有幫助的,但總的來說,對于GCC和MSVC+來說,情況是怎樣的呢?堆分配不像堆棧分配那樣高性能嗎?沒有區別嗎?或者是如此微小的差異變成了毫無意義的微觀優化。哪個更快:堆棧分配還是堆分配
查看完整描述

3 回答

?
心有法竹

TA貢獻1866條經驗 獲得超5個贊

堆棧分配要快得多,因為它真正做的就是移動堆棧指針。使用內存池,您可以從堆分配中獲得類似的性能,但這會帶來稍微增加的復雜性和它自己的麻煩。

此外,堆棧和堆不僅是性能考慮因素;它還告訴您許多關于對象的預期生存期的信息。


查看完整回答
反對 回復 2019-07-03
?
MYYA

TA貢獻1868條經驗 獲得超4個贊

堆棧要快得多。它實際上只在大多數體系結構上使用單一指令,在大多數情況下,例如在x86上:

sub esp, 0x10

(將堆棧指針向下移動0x10字節,從而“分配”這些字節供變量使用)。

當然,堆棧的大小非常有限,因為如果過度使用堆棧分配或嘗試執行遞歸:-)

此外,幾乎沒有理由優化不需要它的代碼的性能,例如通過分析演示的代碼。“過早優化”通常會導致比它更多的問題。

我的經驗法則:如果我知道我需要一些數據編譯時,它的大小在幾百個字節以下,我堆棧-分配它。否則我就堆-分配它。


查看完整回答
反對 回復 2019-07-03
  • 3 回答
  • 0 關注
  • 554 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號