根據我對動態內存分配的瞭解,堆似乎只是一個充足的內存池,您可以儘可能多地使用它。我的問題是,爲什麼你不總是使用變量和對象的堆,並忘記堆棧?爲什麼要使用堆棧?爲什麼不只是堆? - C/C++
0
A
回答
3
從性能的角度來看,堆棧上的分配是「免費的」。堆分配相對昂貴。
另外,從概念上講,它可以讓物體在超出範圍後立即被丟棄。
0
- 堆棧可以節省空間
- 我們使用堆主要是當我們希望控制對象的生命週期,分配上的函數(比方說) 廢物結束後未使用的堆內存中的臨時緩衝區可以重用的堆內存。
- 我們使用堆主要是當我們希望控制對象的生命週期,分配上的函數(比方說) 廢物結束後未使用的堆內存中的臨時緩衝區可以重用的堆內存。
- 堆棧可以更快比堆
- 內存分配在堆的過程是常數(幾個由編譯器插入機器指令鏈接期間)和快速的。堆上的內存分配比較慢(對glibc和搜索例程的函數調用),尤其是在分片時。
- 內存分配在堆的過程是常數(幾個由編譯器插入機器指令鏈接期間)和快速的。堆上的內存分配比較慢(對glibc和搜索例程的函數調用),尤其是在分片時。
我寧願一個堆棧,當我需要大量的內存進行一次計算,該項目涉及到執行很多這樣的計算。我不會使用堆來分割內存。
只要不超過幾百個字節就可以使用堆棧,而且可能會嘗試使用異常覆蓋進程的其他部分,從而導致崩潰。
相關問題
- 1. 堆棧爲空...爲什麼?
- 2. 爲什麼堆棧彈出(而不是+
- 3. 爲什麼堆棧溢出?
- 4. 爲什麼堆棧有界?
- 5. 爲什麼堆棧炸燬
- 6. C++堆棧/堆棧。爲什麼只有一個新操作員?
- 7. 什麼是堆棧用於?他們爲什麼使用C++?
- 8. 什麼「堆棧無效,堆棧只支持堆棧1和堆棧5」是什麼意思?
- 9. 什麼是'堆棧',因爲它與.Net
- 10. 爲什麼作爲指針的類實例使用堆而不是堆棧?
- 11. 爲什麼這個分配堆棧而不是堆?
- 12. 爲什麼堆棧不能回滾
- 13. 爲什麼指針不在堆棧上?
- 14. 爲什麼setjmp不能保存堆棧?
- 15. PyPy 1.7爲什麼不實現「無堆棧」堆棧?
- 16. 全堆棧,堆棧交換等,什麼是堆棧?
- 17. 爲什麼堆棧結束爲空?
- 18. 什麼是堆棧跟蹤?
- 19. 什麼是InfiniBand堆棧?
- 20. 什麼是硬件堆棧?
- 21. 什麼是堆棧跟蹤
- 22. 什麼是LAMP堆棧?
- 23. 什麼是jQuery堆棧?
- 24. 什麼是Linux堆棧?
- 25. 什麼是「堆棧顛簸」?
- 26. 爲什麼我們要在堆棧和堆上管理結構
- 27. 爲什麼堆棧和堆都需要內存分配
- 28. 爲什麼堆棧被稱爲抽象數據類型。如果堆棧是adt,那麼如何實現堆棧?
- 29. SDL爲什麼要在堆上創建紋理而不是堆棧
- 30. 什麼是堆棧,爲什麼malloc防止溢出?
一個快速谷歌出現了例如:http://gribblelab.org/CBootcamp/7_Memory_Stack_vs_Heap.html - 幾個好的利弊列出堆棧vs堆在那裏。 – faffaffaff
實際上有一個比喻:爲什麼寫一堆單個函數並從'main'調用它們?爲什麼不把所有代碼寫在'main'中? – jxh
查看[這篇文章](http://stackoverflow.com/questions/79923/what-and-where-are-the-stack-and-heap?rq=1)有關堆棧和堆的參考'。 –