2013-04-09 108 views
2

讓字符串連接,內存分配在C#

string a = 「Test」; 
string b = 「test 2」; 
string c = a + b 

C的輸出爲"Testtest 2"

我想知道是如何分配的內存?

+1

http://www.dotnetperls.com/string-memory – shenku 2013-04-09 06:38:03

回答

3
string a = "Test"; 

您創建一個名爲a及其指向內存中的​​對象引用。

string b = "test 2"; 

您創建一個名爲b及其指向內存中的「test 2」對象引用。

string c = a + b; 

您要爲a + b分配新的內存地址(這個過程使用String.Concat方法。)因爲字符串在.NET immutable。然後c參考這個新的內存地址。

這是這個IL代碼;

IL_0000: nop 
    IL_0001: ldstr  "Test" 
    IL_0006: stloc.0 
    IL_0007: ldstr  "test 2" 
    IL_000c: stloc.1 
    IL_000d: ldloc.0 
    IL_000e: ldloc.1 
    IL_000f: call  string [mscorlib]System.String::Concat(string, 
                   string) 
    IL_0014: stloc.2 
    IL_0015: ldloc.2 

stloc.0被使用,其存儲關於評價堆棧的頂部的值到本地存儲器插槽0

ldstr指令用於加載字符串到存儲器或評估棧。在可以使用之前,需要將值加載到評估堆棧中。

ldloc指令是一個加載本地指令。 Ldloc將本地變量的值放在堆棧上。