堆疊(值型別,引用型別)

2021-07-09 12:08:26 字數 1167 閱讀 5373

一、堆疊的存在意義

由於不是系統和底層的,就簡單的談一談堆疊在c#中堆疊對於值型別、引用型別的意義

堆疊在這裡和棧等同

1、值型別:在c#中有int、long、float、char、bool、enum、struct(結構體)、double等常用型別

這裡需要注意的是最後的struct(結構體)和class很容易混淆,具體的區別等會介紹。

2、引用型別:class(類)、string、陣列、介面、委託等基本的幾個。

3、struct和class的區別

3.1、struct是值型別,class是引用型別;

3.2、struct的值儲存在堆疊中,class的引用儲存在堆疊中,class的例項儲存在託管堆中;

3.3、class具有繼承的特性;

3.4、class有預設的析構函式;

3.5、實際資料處理時,class和struct的資料結構是不一樣的。

4、以struct和class為例,舉例了堆疊對於兩種不同型別的意義

4.1、值型別的值儲存在堆疊中;

4.3、對資料的操作不同

4.3.1、值型別在宣告乙個實際的資料時,首先會在堆疊中分配一塊連續的記憶體給變數,如果沒有初始化,系統自動會初始化,如果初始化,就會給變數賦值;

5、堆是程式設計師分配記憶體,比較自由;棧是系統分配記憶體,比較規矩

再次宣告乙個值型別的變數時,重複以上步驟;

在刪除變數時,空間會被馬上**,等待下次分配;

4.3.2、引用型別

宣告乙個string型別的值時:首先在堆疊中分配乙個儲存空間,然後儲存乙個引用位址,名字是str,接著得到乙個物件例項,最後引用指向這個物件例項;

如果有string cc="wo",此時。在堆疊中再次開闢空間,儲存cc,這是由於cc和str指向的是同乙個物件例項,cc也會指向str="wo"

刪除其中任意乙個,物件例項不會馬消失,當str和cc刪除完,物件例項和空間才會消失和**。

二、值型別和引用型別的關係

裝箱和拆箱

int i = 1;

object o = i;//裝箱

int j = (int)o;//拆箱

需要注意的地方

1、拆箱需要有足夠的空間儲存拆箱之後的值;

2、只有物件被裝箱了,才能被拆箱;

Swift學習 值型別 引用型別 堆 棧

在swift中型別其實就分為兩類 值型別 value types 每個例項都保留乙份獨有的資料拷貝,一般以結構體 struct 列舉 enu m 或者元組 tuple 的形式出現。引用型別 reference types 每個例項共享乙份資料 一般以類 class 的形式出現。具體是什麼意思呢?看看...

堆 棧 值型別 引用型別 裝箱 拆箱

一來是為了感受國外優秀技術社群知名博主的高質量文章,二來是為了複習對.net技術的基礎拾遺達到溫故知新的效果,最後也是為了鍛鍊一下自己的英文讀寫能力。因為是首次翻譯英文文章 哎,原諒我這個菜比,弱爆了!所以肯定會有很多問題 有些語句理解不透徹,翻譯出來也不通順,還請不吝賜教 也請各位園友多多指正,謝...

值型別 引用型別

在 c 中有兩種型別的資料,一種是值型別資料,一種是引用型別資料。在編碼的時候區分這兩種型別資料,可以避免一些細小的編碼錯誤。首先說說什麼型別是值型別,例如 int float bool之類的基礎型別,以及用struct定義的型別,如 datetime。除此外,如string,陣列,以及用class...