gpt4 book ai didi

c# - C#中字符串连接中的内存分配

转载 作者:行者123 更新时间:2023-11-30 22:18:50 32 4
gpt4 key购买 nike

让,

string a = “Test”;
string b = “test 2”;
string c = a + b

c的输出是"Testtest 2"

我想知道内存是怎么分配的?

最佳答案

string a = "Test";

您创建一个名为a 的引用,它指向内存中的"Test" 对象。

string b = "test 2";

您创建一个名为 b 的引用,它指向内存中的 “test 2” 对象。

string c  = a + b;

您正在为 a + b 分配新的内存地址(并且此过程使用 String.Concat 方法。)因为字符串是 immutable 在 .NET 中。然后 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 将局部变量的值放在堆栈上。

关于c# - C#中字符串连接中的内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15894906/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com