c# - ldstr 是否在内部实现了 newobj?

标签 c# .net jit cil il

众所周知,字符串是隐式实例化的,这意味着我们不必使用 new 来获取对对象的引用。

正因为如此,我一直相信框架会处理这个问题,因此如果我这样做,我会得到相同的 IL:

String first = new String(new char[] {'a'});
string second = "a";

但是第一行似乎是使用 newobj instance void [mscorlib]System.String::.ctor(char[]) 完成的 和第二个 ldstr "a"

因此,为了获得字符串引用,ldstr 是否会在内部调用 newobj?我在哪里可以看到支持它的规范/详细信息?

最佳答案

ldstr 为您提供对文字字符串的引用 per the documentation (记住文字字符串默认是驻留的,所以它们只创建一次)。第一条语句按预期使用 newobj 指令创建 string 的常规实例。

关于c# - ldstr 是否在内部实现了 newobj?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10111194/

相关文章:

c# - 如何在c#字段中转换json数组字段

.NET/Win32 - 检测属于另一个应用程序的窗口何时获得焦点的事件

java - 如何读取 IBM jit 转储文件

llvm - 为什么numba生成的用于向量加法的LLVM IR太复杂

c# - 从 C# 迁移到 C++(加上在同一解决方案中使用两者)

c# - "in"具有原始值类型的修饰符?

c# - 如何优化XML的书写方式?

c# - 在不知道类型的情况下将对象转换为泛型类

c# - 如何通过win forms c#将数据发布到网站

java - JMH - 为什么 JIT 不消除我的死代码