C# 會將記憶體分為兩大用途︰Stack 與 Heap。
C# 中所有的區域變數 (不管是 Value Type 或是 Reference Type),其內容 (變數名稱、型別與與值) 都是儲存在 Stack 中。
Value Type 變數儲存的內容是「實值」。
Reference Type 變數儲存的內容是「參考」。使用 new 關鍵字實體化類別的物件,其物件內容是儲存在 Heap 中。Reference Type 變數中所儲存的參考,便是指向 Heap 中的記憶體起始位址。
傳遞變數時,是以Stack中的值、址複製後傳遞,所以傳值(Call / Pass by value)資料量比較大時,便顯得相當耗時。而傳址(Call / Pass by reference)免去複製其他變數內容資料,所以相對比較有效率。
傳遞給方法時是複製Stack的值給方法使用,除非使用 ref 關鍵字。
參考資料