2013-06-19 80 views
0

根據我對動態內存分配的瞭解,堆似乎只是一個充足的內存池,您可以儘可能多地使用它。我的問題是,爲什麼你不總是使用變量和對象的堆,並忘記堆棧?爲什麼要使用堆棧?爲什麼不只是堆? - C/C++

+0

一個快速谷歌出現了例如:http://gribblelab.org/CBootcamp/7_Memory_Stack_vs_Heap.html - 幾個好的利弊列出堆棧vs堆在那裏。 – faffaffaff

+1

實際上有一個比喻:爲什麼寫一堆單個函數並從'main'調用它們?爲什麼不把所有代碼寫在'main'中? – jxh

+0

查看[這篇文章](http://stackoverflow.com/questions/79923/what-and-where-are-the-stack-and-heap?rq=1)有關堆棧和堆的參考'。 –

回答

3

從性能的角度來看,堆棧上的分配是「免費的」。堆分配相對昂貴。

另外,從概念上講,它可以讓物體在超出範圍後立即被丟棄。

0
  • 堆棧可以節省空間
    • 我們使用堆主要是當我們希望控制對象的生命週期,分配上的函數(比方說) 廢物結束後未使用的堆內存中的臨時緩衝區可以重用的堆內存。

  • 堆棧可以更快比堆
    • 內存分配在堆的過程是常數(幾個由編譯器插入機器指令鏈接期間)和快速的。堆上的內存分配比較慢(對glibc和搜索例程的函數調用),尤其是在分片時。

我寧願一個堆棧,當我需要大量的內存進行一次計算,該項目涉及到執行很多這樣的計算。我不會使用堆來分割內存。
只要不超過幾百個字節就可以使用堆棧,而且可能會嘗試使用異常覆蓋進程的其他部分,從而導致崩潰。