【C#基礎】從堆棧看類型

1.什麼是堆和棧?

棧是編譯期間就分配好的內存空間,因此你的代碼中必須就棧的大小有明確的定義,棧負責保存代碼的執行和調用過程;堆是程序運行期間動態分配的內存空間,你可以根據程序的運行情況確定要分配的堆內存的大小,負責保存對象和數據。

舉例說明:將棧想象成一個自頂向下堆疊而成的盒子,每調用一次方法,應用程序所發生的事情記錄在棧頂的一個盒子中,而我們每次只能使用棧頂的盒子來記錄執行過程。堆大多用來保存信息,因此可在任意時間訪問,可以比喻成一個倉庫存儲着所有的東西,裏面是無章可循的沒有排列的先後,但是需要的信息都可以在堆裏面找到。


2.什麼是值類型和引用類型

值類型和引用類型包含如下:

         

3.值類型和引用類型的區別:

1一般而言,值類型的數據存儲在內存的棧中,引用類型存儲在內存的堆中(這種說法不夠嚴謹,爲記憶便利)。

2從上面的舉例當中也能夠看出值類型(棧)的存取速度快,引用類型(堆)存取速度慢。

3值類型表示實際數據,引用類型表示指向存儲在內存中的數據的指針或引用。

4值類型繼承自System.Valuetype,引用類型繼承自System.Object

5棧的內存自動釋放,堆有GC(垃圾回收機制)

4.裝箱和拆箱

裝箱和拆箱是值類型和引用類型之間相互轉換是要執行的操作,作爲一個橋樑的作用。裝箱和拆箱是值類型和引用類型之間相互轉換是要執行的操作。簡單的來說:裝箱就是值類型轉換爲引用類型;拆箱就是引用類型轉換爲值類型。

舉例:

裝箱是值類型到object 類型或到此值類型所實現的任何接口類型的隱式轉換 int i = 10 ;object obj = i;
拆箱將引用類型轉換爲值類型,從object 類型到值類型或從接口類型到實現該接口的值類型的顯式轉換;:int i=0;Object obj=i;int j=(int)obj;  


發佈了42 篇原創文章 · 獲贊 22 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章