C 值型別,引用型別

2021-08-22 04:39:10 字數 796 閱讀 5546

2,引用型別

概念:值型別直接儲存其值,而引用型別儲存對其值的引用。

引用型別:string,class,陣列(派生於system.array),委託(派生於system.delegate),介面。

引用型別當宣告乙個類時,只在棧中分配一小片記憶體用於容納乙個位址,而此時並沒有為其分配堆上的記憶體空間。

3,為什麼託管堆更慢?

資料結構中的棧(後進先出的線性表),堆(經過某種排序的二叉樹),一種概念。

語言中stack與heap指的是記憶體中的某乙個區域。

如下是託管堆更慢的原因:

cpu有專門的暫存器(esp,ebp)來操作棧,堆都是使用間接定址的。所以棧更快。存在棧中的資料大小與生存期必須是確定的,缺乏靈活性。

棧是編譯時分配空間,而堆是動態分配(執行時分配空間),所以棧的速度快。

棧是程式啟動的時候,作業系統分好了給你的。堆是用的時候才向系統申請的,用完了還回去,這個申請和交還的過程開銷相對就比較大了。

引用型別在效能上欠於值型別的原因:

引用型別變數要分配於託管堆上,記憶體釋放則由gc完成,造成一定的cg堆壓力,且必須完成對其附加成員的記憶體分配過程,以及物件訪問問題。

4,字串

字串是引用型別

string s1 = "a"; string s2 = s1; s1 = "b";//s2 is still "a"

改變s1的值對s2沒有影響。這更使string看起來像值型別。實際上,這是運算子過載的結果,當s1被改變時,.net在託管堆上為s1重新分配了記憶體。這樣的目的,是為了將做為引用型別的string實現為通常語義下的字串。

C 值型別與引用型別

1.主要內容 型別的基本概念 值型別深入 引用型別深入 值型別與引用型別的比較及應用 2.基本概念 c 中,變數是值還是引用僅取決於其資料型別。c 的基本資料型別都以平台無關的方式來定義,c 的預定義型別並沒有內置於語言中,而是內置於.net framework中。net使用通用型別系統 cts 定...

C 值型別和引用型別

c 資料型別 值型別,引用型別 概念 值型別直接儲存其值,引用型別儲存對值的引用 這兩種型別儲存在記憶體的不同地方 值型別儲存在堆疊中,引用型別儲存在託管堆上。乙個引用型別的例子,如圖 上圖中,只有乙個user物件,u1和u2都指向包含該物件的記憶體位置 執行結果 在c 中,基本資料型別如bool和...

c 引用型別與值型別

c 的值型別包括 結構體 數值型別,bool型,使用者定義的結構體 列舉,可空型別。c 的引用型別包括 陣列,使用者定義的類 介面 委託,object,字串。在c 中函式傳值的特點 1.對於複雜的資料型別,按引用傳遞的效率更高,因為在按值傳遞時,必須複製大量的資料 2.除非特別指定,所有的引用型別都...