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