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 寄存器中)可能比按引用傳遞(然后必須取消引用指針)便宜。
- 1 回答
- 0 關注
- 163 瀏覽
添加回答
舉報