【公告】因應 .NET5 2020 改版,原預計 6/1 開放 ASP.NET MVC 全系列課程訂閱暫停

參考型別 - 堆疊(Heap)與堆積(Stack)

C# 內建了兩個非常重要的參考型別 object 以及 string , object 是.NET Framework當中Object 的別名, Object 本身是其他型別的基底型別,提供所有型別需要的基本特性與功能。

String 型別表示一串固定長度的 Unicode 字元組,它是 .NET Framework 平台所提供的String 類別物件的別名,用來表示一段字串。

當你還沒有任何類別與物件概念的時候,很難去理解 object 以及 string 這兩種型別的意義,因此這裏暫時不對其中的細節作說明,但是有一點必須釐清的是 string 與 char 之間的差異。

char 與 string 兩者均是與字元有關的型別,其中 char 代表一個單一字元, string 則是一連串字元所組成的字串, char 以單引號 ' 包圍其代表的字元,而 string 則是以雙引號 " 作表示。
string x = "abc";
string y = "a";
char z = 'a';
第一個變數 x 為三個英文字母 abc所組成的字串,以雙引號作標式。第二個變數雖然只有一個字母,但是同樣由雙引號作標示,因此與第一個變數相同,均是字串型別。

第三個變數 y 宣告為 char ,表示這是一個字元型別,將一個單一字母儲存至此變數,並且以單引號作標示。

堆疊(Heap)與堆積(Stack)

實值型別與參考型別為C#兩種主要的資料型別,它們兩者之間最大的差異,在於資料的儲存方式,本章最後來看看兩者之間與資料儲存位置的關係:
  • 實值型別
    大量使用於程式邏輯運算的數值與字元等類型資料,例如整數、浮點數與布林值等等,這種型別的資料以固定的大小,依序儲存於記憶體堆疊(Stack),相對於物件型別而言,具有比較高的效率。
  • 參考型別
    建構 C# 應用程式的主要物件型別資料,在應用程式執行的過程中,預先定義的物件型別以 new 建立物件實體,並且儲存於堆積(Heap),這是一種由系統彈性配置的記憶體空間,堆積沒有特定的大小與存活時間,因此可以被彈性的運用於物件的存取,變數則藉由物件的參考引用儲存於堆積的物件。
下圖說明實值型別與參考型別兩者在記憶體當中,儲存方式的差式:



實值型別變數指向記憶體當中資料的儲存位置,可直接對資料進行存取,而參考型別則需進一步透過參考指向資料真正儲存的位置,實值型別因為直接存取資料,因此提供較佳的運算效能,較參考型別則是提供了物件運用的彈性。

沒有留言: