2013-04-09 102 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将本地变量的值放在堆栈上。