专栏首页hbbliyongC#在.NET编译执行过程

C#在.NET编译执行过程

1..NET语言的编译器接受源代码文件,并生成名为程序集的输出文件。

  • 程序集要么是可执行的,要么是DLL
  • 程序集里的代码并不是本机代码,而是一种名称为CIL的中间语言
  • 程序集包含如下信息:
    • 程序的CIL
    • 程序中使用的类型的元数据
    • 对其他程序集引用的元数据

2.   程序的编译过程

   程序的CIL直到它被调用运行时才会被编译成本机代码。在运行时,CLR执行下面步骤:

  • 检查程序集的安全特性
  • 在内存中分配空间
  • 把程序集中的可执行代码发送给实时编译器(JIT),把其中的一部分编译成本机代码。

程序集中的可执行代码只在需要的时候由JIT编译器进行编译,然后它就被缓存起来以备在后来的程序中执行。这就意味着不被调用的代码不会被编译成本机代码,而且被调用的代码只被执行一次。

一旦CIL被编译成本机代码,CLR就在它运行时管理它,执行像内存释放、数组边界检查、检查参数类型、异常管理等任务。有两个重要的术语由此而生。

  • 托管代码:为.NET框架编写的代码称为托管代码,需要CLR
  • 非托管代码:不在CLR控制下运行的代码,比如Win32 C/C++ DLL,称为非托管代码

3.编译和执行过程图

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 提升代码内外部质量的22条经验

    本文主要关注代码的内部和外部质量,编程的价值观,代码质量的评估标准,整洁代码的匠艺以及如何维护已有的代码。 外部质量:用户所能感受到的部分,正确性,易用性,效率...

    hbbliyong
  • 更快学习 JavaScript 的 6 个思维技巧

    我们在学习JavaScript,或其他任何编码技能的时候,往往是因为这些拦路虎而裹足不前: 有些概念可能会造成混淆,尤其当你是从其他语言转过来的时候。 找不到时...

    hbbliyong
  • C# 开发者审查代码的41条建议

    1. 确保没有任何警告(warnings)。 2.如果先执行Code Analysis(启用所有Microsoft Rules)再消除所有警告就更好了。 3. ...

    hbbliyong
  • 代码评审鲜为人知的好处

    事实上,代码评审的好处远不止这些。有些项目经理或者开发人员不愿意多提评审,Coding 的过程包含的内容非常丰富,如果只把一个字符一个字符地敲代码叫做 Codi...

    歪脖贰点零
  • 想成为一个好程序员?学学如何写作吧

    不管你是有多年编程经验的程序员,亦或是你刚刚开始学习编程,如果你在读这篇文章,那么你已经有了另一门语言的技能:英语技能。

    程序员小跃
  • 22.【Kevin聊敏捷】XP极限编程之12最佳实践(二)

    团队圈分为:代码规范(Code Standards),持续集成(Continuous Integration),集体代码所有制(Continuous Integ...

    开心的Kevin
  • 为什么 if else 不是好代码?

    其实这是个再正常不过的coding习惯,当我们代码量小的时候用来做条件判断是再简单不过的了。

    芋道源码
  • Xcode创建可复用的代码块 原

            在各种程序开发中,编写代码的效率是非常重要的一个问题,各种优秀的编译器也都有相应的插件用于提高程序员的编码速度。在xcode中,可以通过定义代码...

    珲少
  • 互联网开发模式二:敏捷与重构

    敏捷开发的意义和实践 敏捷开发是我们现在最常见的一个“开发模式”,然而很多时候,我们看到“敏捷”两个字,似乎就是让程序员多加点班,或者忽略一些过程加快把代码弄出...

    韩伟
  • 优秀程序员共有的7种优秀编程习惯

    编程是一个很有趣、容易的事情,但是编写好的程序可能是一项艰巨的任务。在大多数情况下,我们发现自己绞尽脑汁,试图了解我们撰写的意大利面条代码,或者是因为新添加的次...

    Java帮帮

扫码关注云+社区

领取腾讯云代金券