C# C语言中字符串连接中的内存分配#

C# C语言中字符串连接中的内存分配#,c#,memory,memory-management,string-concatenation,C#,Memory,Memory Management,String Concatenation,让, c的输出是“testtest2” 我想知道内存是如何分配的 string a = “Test”; string b = “test 2”; string c = a + b 创建一个名为a的引用,并将其指向内存中的“Test”对象 string a = "Test"; string b = "test 2"; 创建一个名为b的引用,并将其指向内存中的“test2”对象 string a = "Test"; string b = "test 2"; 您正在为a+b(此过程使用方法

让,

c的输出是“testtest2”

我想知道内存是如何分配的

string a = “Test”;
string b = “test 2”;
string c  = a + b
创建一个名为
a
的引用,并将其指向内存中的
“Test”
对象

string a = "Test";
string b = "test 2";
创建一个名为
b
的引用,并将其指向内存中的
“test2”
对象

string a = "Test";
string b = "test 2";
您正在为
a+b
(此过程使用方法)分配新的内存地址,因为字符串在.NET中。然后
c
引用这个新的内存地址

这里是这个的IL代码

string c  = a + b;
使用
stloc.0
,它将计算堆栈顶部的值存储到本地内存插槽0中

ldstr
指令用于将字符串加载到内存或计算堆栈中。必须先将值加载到评估堆栈中,然后才能使用该堆栈

ldloc
指令是一条加载本地指令
Ldloc
将局部变量的值放置在堆栈上