让,
string a = “Test”;
string b = “test 2”;
string c = a + b
c的输出为"Testtest 2"
我想知道内存是如何分配的?
答案 0 :(得分:3)
string a = "Test";
您创建一个名为a
的引用,它指向内存中的"Test"
对象。
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
将局部变量的值放在堆栈上。