日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

ASP.NET堆和棧二之值類型和引用類型的參數傳遞和內存分配

瀏覽:276日期:2022-06-08 14:53:16

".NET的堆和棧"系列:

在" ASP.NET堆和棧一之基本概念和值類型內存分配"中,了解了"堆"和"棧"的基本概念,以及值類型的內存分配。我們知道:當執行一個方法的時候,值類型實例會在"棧"上分配內存,而引用類型實例會在"堆"上分配內存,當方法執行完畢,"棧"上的實例由操作系統自動釋放,"堆"上的實例由.NET Framework的GC進行回收。而本篇的重點要放在:值類型和引用類型參數的傳遞,以及內存分配。

傳遞值類型參數

class Class1{    public void Go()    {int x = 5;AddFive(x); Console.WriteLine(x.ToString());        }         public int AddFive(int pValue)    {pValue += 5;return pValue;    }}

大致過程如下:

1、值類型變量x被放到"棧"上。

2、開始執行AddFive()方法,值類型變量pValue被放到"棧"上,并把x的值賦值給pValue,pValue的值變成了5。

3、繼續執行AddFive()方法,pValue的值變成了10。

4、執行完AddFive()方法,釋放pValue的內存,"棧"指針回到x,線程重新回到Go()方法中。

輸出結果:5

以上,在傳遞值類型參數x的時候,實際上是把x一個字節一個字節地拷貝給pValue。

傳遞容易造成"棧溢出"的值類型參數,在值類型參數前加關鍵字ref

public struct MyStruct{    long a, b, c, d, e, f, g, h, i, j, k, l, m;}public void Go(){    MyStruct x = new MyStruct();    DoSomething(x);}public void DoSomething(MyStruct pValue){    // DO SOMETHING HERE....}

假設以上的值類型struct足夠大,而x和pValue都會被分配到"棧"上,這時可能造成"棧溢出"。

如何避免呢?
--解決辦法是讓DoSomething傳遞一個ref類型參數。這樣寫:

public struct MyStruct{    long a, b, c, d, e, f, g, h, i, j, k, l, m;}public void Go(){    MyStruct x = new MyStruct();    x.a = 5;    DoSomething(ref x);        Console.WriteLine(x.a.ToString());       } public void DoSomething(ref MyStruct pValue){    pValue.a = 12345;}

使用ref后,執行DoSomething(ref x),是把x的地址賦值給了pValue,即pValue和x指向了同一個引用地址。當改變pValue的值,變化也會反映到x中。

輸出結果:12345

以上,為了避免"大型"值類型參數傳遞時造成的"棧溢出",可以在值類型前面加ref關鍵字,于是,在傳遞值類型參數x的時候,實際上是把x本身的棧地址拷貝給pValue,x和pValue指向同一個棧地址。

傳遞引用類型參數

傳遞引用類型參數的道理和在傳遞的值類型參數前面加ref關鍵字是一樣的。

public class MyInt{    public int MyValue;}public void Go(){    MyInt x = new MyInt();    x.MyValue = 2;        DoSomething(x);        Console.WriteLine(x.MyValue.ToString());}public void DoSomething(MyInt pValue){    pValue.MyValue = 12345;}

輸出結果:12345

以上大致過程是這樣:
1、在托管堆上創建一個MyInt類型的實例
2、在棧上創建一個MyInt類型的變量x指向堆上的實例
3、把托管堆上的公共字段MyValue賦值為2
4、通過DoSomething(x)方法,把x的引用地址賦值給pValue,即pValue和x指向同一個引用地址
5、改變pValue的值,也會反映到x上

以上,在傳遞引用類型參數x的時候,實際上是把x指向托管堆實例的引用地址拷貝給pValue,x和pValue指向同一個托管堆實例地址。

傳遞引用類型參數,在引用類型參數之前加關鍵字ref

public class Thing{    } public class Animal:Thing{    public int Weight;} public class Vegetable:Thing{    public int Length;}public void Go(){    Thing x = new Animal();        Switcharoo(ref x);        Console.WriteLine("x is Animal    :   " + (x is Animal).ToString());        Console.WriteLine("x is Vegetable :   " + (x is Vegetable).ToString());} public void Switcharoo(ref Thing pValue){    pValue = new Vegetable();}

輸出結果:
x is Animal : False
x is Vegetable : True

以上大致過程是這樣:
1、在托管堆上創建Animal對象實例。
2、在棧上創建類型為Thing的x變量指向Animal實例的引用地址。
3、通過Switcharoo(ref x)方法把x本身的地址賦值給pValue,至此,pValue和x指向了相同的棧內存地址,任何一方的變化都會反映到另外一方。

4、在Switcharoo(ref Thing pValue)內部,在托管堆上創建Vegetable對象實例。
5、pValue指向Vegetable實例,也就相當于x指向Vegetable實例。

以上,當在引用類型參數之前加上關鍵字ref,再傳遞,是把x本身的棧地址拷貝給pValue,x和pValue指向同一個棧地址。

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對的支持。如果你想了解更多相關內容請查看下面相關鏈接

標簽: ASP.NET
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美日韩在线播放视频| 中文字幕一区二区三区在线视频| 亚洲欧美日韩国产一区| 国产精品av久久久久久麻豆网| 97精品一区| 中文字幕在线官网| 91综合网人人| 99久久视频| 神马久久午夜| 欧美a级一区| 中文字幕亚洲影视| 国产精品欧美日韩一区| 国产精品成人3p一区二区三区| 欧美国产中文高清| 久久久久久色 | 视频一区欧美精品| 中文一区一区三区免费在线观| 日韩动漫一区| 免费看久久久| 久久婷婷av| 久久av一区| 国产精品麻豆成人av电影艾秋| 国产精品久久久久蜜臀 | 欧美日韩视频免费看| 国产精品欧美大片| 国产精品毛片一区二区在线看| 天堂中文av在线资源库| 成人片免费看| 久久最新视频| 国产美女视频一区二区| 欧美激情99| 日韩成人亚洲| 美女毛片一区二区三区四区| 四虎成人精品一区二区免费网站| 欧美国产另类| 在线国产一区二区| 亚洲一级大片| 成人影视亚洲图片在线| 91久久中文| 国产精品中文字幕制服诱惑| 精品视频高潮| 神马日本精品| 日本成人精品| 久久国产亚洲| 国产精品久久久久久久久久齐齐 | 亚洲国产一区二区三区在线播放| 日韩欧美中文字幕一区二区三区 | 天海翼亚洲一区二区三区| 成人国产精品一区二区网站| 免费国产自线拍一欧美视频| 麻豆91在线播放| 午夜在线播放视频欧美| 久久精品毛片| 亚洲日韩视频| 色婷婷精品视频| 日韩有吗在线观看| 国产一区欧美| 国产一区二区三区四区五区传媒| 亚洲男女自偷自拍| 精品国产99| 午夜电影一区| 亚洲国产成人精品女人| 国产一区二区三区不卡av| 伊人久久大香线蕉av超碰演员| 国产精品videossex久久发布| 在线综合亚洲| 久久精品欧美一区| 国产激情精品一区二区三区| 免费高清在线一区| 久久国产小视频| 国产麻豆一区二区三区精品视频| 激情久久婷婷| 亚洲女同av| 麻豆精品av| 欧美日韩调教| 亚洲精品极品| 日韩中文字幕区一区有砖一区| 日韩一区二区三区在线免费观看| 久久国产精品美女| 天堂精品久久久久| 久久国产高清| 亚洲大全视频| 成人在线网站| 91免费精品| 国际精品欧美精品| 久热re这里精品视频在线6| 91精品1区| 国产综合精品| 久久久久久久久丰满| 国产成人精品亚洲线观看| 国产精品亚洲四区在线观看| 69堂免费精品视频在线播放| 日韩专区视频网站| 视频在线观看91| 亚洲激情不卡| 日韩视频一区| 日韩一区二区免费看| 欧洲毛片在线视频免费观看| 久久久一二三| 欧美丝袜一区| av在线日韩| 激情欧美日韩一区| 亚洲免费高清| 美女日韩在线中文字幕| 天使萌一区二区三区免费观看| 亚洲精品1区2区| 免费不卡在线观看| 日韩一区二区三区高清在线观看| 日韩精品国产精品| 日本麻豆一区二区三区视频| 欧美一区成人| 美女精品久久| 在线中文字幕播放| 欧美亚洲激情| 免费日韩av片| 亚洲乱码久久| 国产精品综合| 精品亚洲精品| 久久久久久久久丰满| 激情自拍一区| 免费人成精品欧美精品| 日本欧美一区二区| 国产福利一区二区精品秒拍| 久久久久久夜| 婷婷六月综合| 日韩精品视频网| 精品视频网站| 欧美va亚洲va日韩∨a综合色| 亚洲免费婷婷| 国产日韩免费| 国产aa精品| 欧美精品一区二区久久| 日韩欧美久久| 欧美香蕉视频| 亚洲精品亚洲人成在线观看| 麻豆91在线播放| 激情91久久| 国产精品99久久免费| 国产麻豆久久| 91精品国产自产观看在线 | 91精品一区| 六月婷婷综合| 蜜臀精品一区二区三区在线观看| 日韩av字幕| 成人三级高清视频在线看| 久久精品国产68国产精品亚洲| 亚洲日产av中文字幕| 美女视频黄免费的久久| 亚洲福利国产| 日韩久久99| 日韩成人亚洲| 欧美日韩亚洲一区在线观看| 丁香六月综合| 日韩激情中文字幕| 人在线成免费视频| 中文字幕亚洲影视| 精品免费视频| 一本综合精品| 国产成人精品三级高清久久91| 国产高清一区二区| 国产欧美日韩一区二区三区四区| 国产精品麻豆久久| 蜜桃久久精品一区二区| 精品国产一区二区三区av片| 丝袜诱惑制服诱惑色一区在线观看| 久久av免费| 98精品视频| 青青草精品视频| 夜夜精品视频| 久久精品国产精品亚洲毛片| 日本激情一区| 欧美一区在线观看视频| 激情欧美一区二区三区| 亚洲开心激情| 91精品xxx在线观看| 国产欧美一区二区色老头| 自拍日韩欧美| 精精国产xxxx视频在线野外| 国产免费久久| 亚洲久久视频| 在线视频日韩| 秋霞国产精品| 国产精品99一区二区三| 久久国产视频网| 欧美日韩国产一区精品一区| 蜜桃久久久久| 日韩av成人高清| 欧美国产91| 精品91福利视频| 日韩视频久久| 91av亚洲| 精品国产乱码久久久久久樱花| 国产亚洲欧美日韩在线观看一区二区| 久久国产主播| 精品久久久久中文字幕小说| 国产精品一区二区三区av麻| 亚洲在线电影| 欧美日韩精品免费观看视完整| 里番精品3d一二三区| 亚洲精品乱码久久久久久蜜桃麻豆|