第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

是否有必要在只讀結構中使用“in”修飾符?

是否有必要在只讀結構中使用“in”修飾符?

C#
不負相思意 2021-06-10 14:37:28
在 C# 7.2 中,只讀結構是否總是像存在“in”參數(shù)一樣傳遞給函數(shù)?如果不是,在什么情況下復制內(nèi)存是有用的,因為它是只讀的?我有一個只讀結構:public readonly struct Vec2 {     public readonly double X;     public readonly double Y;}那么當調(diào)用數(shù)十億次時,這兩種方法之間是否會有性能差異:public double Magnitude1(Vec2 v){    return Math.Sqrt(v.X*v.X + v.Y*v.Y);}public double Magnitude2(in Vec2 v){    return Math.Sqrt(v.X*v.X + v.Y*v.Y);}如果是這樣,為什么編譯器不識別 Vec2 是只讀結構,而只是像“in”存在一樣傳遞它?是否有一個實例,您可能想要傳遞一個沒有“in”修飾符的只讀結構?
查看完整描述

1 回答

?
人到中年有點甜

TA貢獻1895條經(jīng)驗 獲得超7個贊

只讀結構是否總是像存在“in”參數(shù)一樣傳遞給函數(shù)?


不。如果沒有in修飾符,readonly結構是按值傳遞的,而不是按引用傳遞。


如果不是,在什么情況下復制內(nèi)存是有用的,因為它是只讀的?


如果你想保證內(nèi)存沒有改變,復制內(nèi)存會很有用。請記住,結構可以更改,即使它是readonly. 例如:


readonly struct S

{

    public readonly int I;


    public S(int i) { this.I = i; }

}


class Program

{

    static S s1 = new S(1);


    static void Main()

    {

        A(s1);

    }


    static void A(in S s2)

    {

        Console.Write(s2.I);

        s1 = new S(2); // This is legal even though S is readonly!

        Console.Write(s2.I);

    }

}

in在參數(shù) 上使用修飾符時s2,輸出為 12。沒有in修飾符時,輸出為 11。


這種行為差異意味著編譯器無法透明地in向readonly struct參數(shù)添加修飾符。(即使方法A沒有修改s1,另一個線程也可以。)


那么當調(diào)用數(shù)十億次時,這兩種方法之間是否會有性能差異?


可能有;測量它并查看。我希望結構越大,按值傳遞的速度就越慢。


如果是這樣,為什么編譯器不識別 Vec2 是只讀結構,而只是像“in”存在一樣傳遞它?是否有一個實例,您可能想要傳遞一個沒有“in”修飾符的只讀結構?


也許如果struct它們非常小(例如,8 個字節(jié)或更少),按值傳遞(例如,在 CPU 寄存器中)可能比按引用傳遞(然后必須取消引用指針)便宜。


查看完整回答
反對 回復 2021-06-20
  • 1 回答
  • 0 關注
  • 163 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號