【问题标题】:What are the processes that the .net compiler does in order to compile code? [closed].net 编译器为了编译代码而执行的过程是什么? [关闭]
【发布时间】:2017-01-09 21:21:26
【问题描述】:

首先我想说的是,我不确定这是否是发布此类问题的最佳堆栈交换网站,但我不确定它在哪里最适合。无论如何,正如问题标题所说,我想知道.net 编译器在将我的 C# 代码转换为机器语言时执行的步骤。我看过一些视频,但有些东西我还是不太明白。我会把我所有的问题都留在底部,我会尽量具体。

这是我对 .net 编译器工作原理的理解

我的 C# 代码 -> IL -> JIT -> 汇编代码

  1. “我的 C# 代码”的确切术语是什么?
  2. CLR在这里有什么用?
  3. 整个过程是由 CLR 处理的,还是从哪里来的?
  4. 什么是元数据?
  5. 在从第 1 步到第 2 步以及从第 2 步到第 3 步的过渡之间是否发生了其他事情,或者只是将一些代码翻译成较低级别的语言?

【问题讨论】:

  • 你需要通过 C# 阅读 CLR 书
  • 执行过程由CLR控制,即;它是 .NET Framework 的执行引擎。

标签: c# .net compilation clr jit


【解决方案1】:
  1. 只是 C#(C# -> Roslyn(或 csc)-> IL -> JIT -> 本机)
  2. CLR 读取您的 IL,JIT 是它并持有 GC(以及与此问题无关的更多内容)
  3. CLR 只运行您编译的代码。 C# 编译是通过普通编译器完成的(以前是 csc.exe,但现在已被 Roslyn 弃用)。
  4. There are plenty of examples that state what Metadata is
  5. 在这些步骤中有很多工作要做,但这是主要流程。

【讨论】:

  • 我明白了,CLR 基本上控制了整个过程的权利((C# -> IL -> JIT -> Native))?
  • @Asimm 否 CLR 控制 IL -> Native,编译器(Roslyn 或 csc 取决于您的 Visual Studio 版本)控制 C# -> IL 部分。 JIT 不是你的代码进入的状态,JIT 是IL -> Native 进程中的->。
猜你喜欢
  • 2017-01-11
  • 1970-01-01
  • 2014-01-10
  • 2012-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-11
  • 1970-01-01
相关资源
最近更新 更多