2011-01-21 260 views
-1

這裏我的問題是 什麼是棧和堆內存 我們爲什麼需要這兩種記憶 什麼是每個棧和堆內存

+3

嘗試回答更簡單的問題,例如「什麼是Google?」,然後嘗試「我如何使用Google?」。在學習瞭如何搜索之後,回來在StackOverflow上嘗試一下,你可能會注意到這個問題可能已經被提出了400億次。 – leppie 2011-01-21 10:02:03

+2

肯定是在講義 – skaffman 2011-01-21 10:02:09

回答

1

在C/C++語言的內存分配到堆棧的利弊在分配範圍結束時自動釋放,堆中的內存必須有一些策略(free(),delete ...或者一些垃圾回收器)可用。分配在堆上的內存在不同的功能範圍內可見。在堆棧中,我們不能分配大塊內存,所以當需要爲數據分配大空間時,堆也是有用的。

2

一言以蔽之:

The stack - 程序使用實際運行程序內存。這包含局部變量,回調數據(例如,當您調用函數,堆棧存儲狀態並在輸入新函數之前將其置於代碼中)以及其他一些小事情。您通常不直接控制堆棧,變量和數據被破壞,當您移入和移出函數作用域時創建。

The heap - 程序的「動態」內存。每次您動態創建一個新對象或變量時,它都會存儲在堆中。這個內存是由程序員直接控制的,你應該負責創建和刪除那裏的對象。

0

我不確定你在問什麼上下文,但我可以回答他們在內存分配中的使用。這兩個數據結構都需要我的平臺,如.NET for Garbage collection。請記住,所有值類型都存儲在堆棧上,並且堆中的所有引用類型都被存儲。這有助於運行時環境創建一個對象圖並跟蹤所有對象未被使用並且可以考慮用於垃圾收集。

1

檢查this JVM上的簡短文章,它解釋Java堆棧和堆。