C#學習筆記【七】——堆和棧

7.1堆和棧簡介

    我們把內存分爲堆 空間和棧空間。

    棧空間比較小,但是讀取速度快;堆空間比較大,但是讀取速度慢

    棧的特徵,數據只能從棧的頂端插入和刪除;堆是一塊內存區域,與棧不同,堆裏的內存能夠以任意順序存入和移除。

    CLR的GC(Garbage Collector垃圾回收器)就是內存管理機制。

7.2值類型和引用類型

    類型被分爲兩種:值類型(整數,bool struct char 小數)和引用類型(string 數組 自定義的類,內置的類)。

    值類型只需要一段單獨的內存,用於存儲實際的數據,(單獨定義的時候放在棧中)。

    引用類型需要兩段內存,第一段存儲實際的數據,它總是位於堆中,第二段是一個引用,指向數據在堆中的存放位置。

    當我們使用引用類型賦值的時候,其實是賦值的引用類型的引用(在棧內操作,賦值棧內存放的內存地址),並釋放沒有引用指向的堆空間。

Vector3 v1 = new Vector3();//定義的類

v1.x = 100;

v1.y = 100;

v1.z = 100;

Vector3 v2 = new Vector3();

v2.x = 200;

v2.y = 200;

v2.z = 200;

v2 = v1;

v2.x = 300;

Console.WriteLine(v1.x);//結果是300,因爲v2=v1賦值時,v1和v2的引用都指向同一個堆空間(原來v1指向的   

                        //堆)

    如果數組是一個值類型的數組,那麼數組中直接存儲值;如果是一個引用類型的數組(數組中存儲的是引用類型),那麼數組中存儲的是引用(內存地址)。
 

Vector3[] vArray = new Vector3[] { new Vector3(), new Vector3(), new Vector3() };

Vector3 v1 = vArray[0];

vArray[0].x = 100;

v1.x = 200;

Console.WriteLine(vArray[0].x);//修改v1.x vArray[].x結果也爲200

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章