C#中關於堆和棧的我的理解

1、解釋 棧(Stack)是編譯期間就分配好的內存空間 堆(Heap)是程序運行期間動態分配的內存空間 2、區別 棧一般保存着咱們代碼執行的步驟:如AddFive()方法,int pValue變量 堆上存放的則可能是對象,數據等。 棧不用本身管理,也不歸GC管理,當頂元素使用完畢後,自動釋放 堆受GC管理,被GC清理 值類型的數據存儲在內存的棧中;引用類型的數據存儲在內存的堆中,而內存單元中只存放堆中對象的 內存的分配和銷燬 當一個類的實例對象建立的時候,這個對象的不一樣成員按類別被分配到了不一樣的內存區域,值類型和引用類型的指針被分配到了棧上,引用類型的實例對象被分配到了託管堆上,靜態成員被分配到了全局數據區。此時棧上的指針會指向堆上的對象。當對象使用完之後,引用和實際對象的聯繫就會斷開,從而從而使對象冬眠。由於棧具備自我維護性,它的內存管理能夠經過操做系統來完成,而此時堆上的冬眠對象就須要經過垃圾回收器(GC)使用必定的算法來進行回收,釋放對象所佔據的內存。
相關文章
相關標籤/搜索