C# 中的棧和堆

程序運行時,它的數據必須存儲在內存中。一個數據項須要多大的內存、存儲在內存中的什麼位置、以及如何存儲都依賴於該數據項的類型。程序員

運行中的程序使用兩個內存區域來存儲數據:棧和堆。編程

棧是一個內存數組,是一個 LIFO (Last-In First-Out,後進先出)的數據結構。棧存儲幾種類型的數據:數組

  • 某些類型變量的值
  • 程序當前的執行環境
  • 傳遞給方法的參數

系統管理全部的棧操做。做爲程序員,你不須要顯式地對它作任何事情。但瞭解棧的基本功能能夠更好地瞭解程序在運行時正在作什麼。數據結構

提示: 棧也常常被稱爲堆棧,而堆依然稱爲堆,因此堆棧這個概念並不包含堆,你們要注意區分。編程語言

棧的特徵

棧有以下幾個廣泛特徵:對象

  • 數據只能從棧的頂端插人和刪除
  • 把數據放到棧頂稱爲入棧(push)
  • 從棧頂刪除數據稱爲出棧(pop)
入棧和出棧

堆是一塊內存區域,在堆裏能夠分配大塊的內存用於存儲某類型的數據對象。與棧不一樣,堆裏的內存可以以任意順序存人和移除。下圖展現了一個在堆裏放了 4 項數據的程序。blog

內存堆

雖然程序能夠在堆裏保存數據,但並不能顯式地刪除它們。CLR 的自動 GC(Garbage Collector,垃圾收集器)在判斷出程序的代碼將不會再訪問某數據項時,自動清除無主的堆對象。咱們所以能夠再也不操心這項使用 C 編程語言時很是容易出錯的工做了。下圖闡明瞭垃圾收集過程。內存

堆中的自動垃圾收集器

總結

本篇介紹了棧和堆最最最基本的概念,主要是爲下一篇(地址:https://www.vinanysoft.com/c-sharp-basics/data-types/categories-of-types/)介紹值類型和引用類型打基礎。get

相關文章
相關標籤/搜索