2
讓字符串連接,內存分配在C#
string a = 「Test」;
string b = 「test 2」;
string c = a + b
C的輸出爲"Testtest 2"
我想知道是如何分配的內存?
讓字符串連接,內存分配在C#
string a = 「Test」;
string b = 「test 2」;
string c = a + b
C的輸出爲"Testtest 2"
我想知道是如何分配的內存?
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
將本地變量的值放在堆棧上。
http://www.dotnetperls.com/string-memory – shenku 2013-04-09 06:38:03