close

剛剛看到天才少年 laneser 寫了一段程式碼,為方便說明,我稍微刪掉了一些。大致上如下:

[STAThread]
static unsafe void Main() {
string s = "123";

fixed (char* ps = s) {
ps[
0] = '3';
ps[
1] = '2';
ps[
2] = '1';
}

MessageBox.Show(
"123");
}

 

 

 

得到的結果是這樣 

image

  

 

呵~很有趣吧!其實原理不難,主要是因為 .NET 的 String 型別是不可變動的 (Immutable),因此為了節省記憶體的使用,CLR 會建立一個保留集區 (Intern Pool) 來存放字串。當程式中使用字串時,CLR會先檢查保留集區,有的話就傳回保留集區內的參考;沒有的話,就把字串加到保留集區內,再傳回參考。

 

 

所以上述程式碼其實是這樣執行的:


image

 

 

  

 

天才少年的這段程式碼實在太有趣了!

arrow
arrow
    全站熱搜

    AnferneeHardaway 發表在 痞客邦 留言(1) 人氣()