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

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

2.   程序的编译过程

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

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

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

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

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

3.编译和执行过程图

C#在.NET编译执行过程的更多相关文章

  1. C#编译执行过程

    前言 大家好,我是卫斯理(Wesley).喜欢武侠的朋友可能知道小说中也有个卫斯理,他是位冒险家,财力充沛,极富冒险精神,并且有着超强的好奇心,对奇异的事情总有"打破沙锅问到底"的 ...

  2. C程序编译执行过程

    C程序编译执行过程   认识C编译执行过程,是C学习的开端. 简单说C语言从编码编译到执行要经历一下过程:   C源代码 编译---->形成目标代码,目标代码是在目标机器上运行的代码. 连接-- ...

  3. go 编译:交叉编译&编译执行过程

    1. 交叉编译 编译Windows程序和mac程序 GOOS=windows GOARCH-amd64 go build main.go 转自:https://www.cnblogs.com/mafe ...

  4. c语言编译执行过程

    <h4>认识C编译执行过程</h4>认识C编译执行过程,是C学习的开端.简单说C语言从编码编译到执行要经历一下过程: C源代码编译---->形成目标代码,目标代码是在目标 ...

  5. Java编译执行过程

    在刷软件设计师中级考试的题目,判断关于编译系统对某高级语言进行翻译的叙述的对错.记得刚开始学Java的时候自己就觉得自己对程序的执行过程理解的相当的透彻,但是一对答案,我的小心脏就有点受不了了,特此在 ...

  6. angualar入门学习-- 自定义指令 指令编译执行过程

    3个阶段: 一.加载阶段 加载angular.js的源码,找到ng-app确定应用边界范围. 二.编译阶段 compile 查找所有指令,保存在一个列表中 对所有指令按优先级(property属性值) ...

  7. java代码的编译执行过程

  8. C C++ Java C# JS编译、执行过程的原理入门分析

    C.C++是典型的编译型编程语言,编译链接后,点击则可执行. JS,解释型脚本语言,则不需要进行编译,直接解释执行. Java和C#则是所谓的高级语言,编译执行的方式做了很多处理, 尤其是C#,VS编 ...

  9. Android入门学习:Android 系统框架及应用程序执行过程

    Android基础知识学习 新手上路,还请多多帮助.由于初学,博客内容难免有不正确的地方,还请各位多多指教,相互学习! 主要内容: 1.Android层次架构及主要功能 2.Android编程模型,程 ...

随机推荐

  1. SqlAlchemy操作(三)

    1.基于SQLALCHEMY建表 from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Colu ...

  2. 在QtCreater中配置Artistic Style格式化Qt程序源代码!!

    Qt很吸引人,可能是我对Qt开发工具QtCreater不熟悉,只发现里面提供了一个快捷键:"ctrl+i",很多人说这就是格式化代码快捷键,我发现这仅仅是代码缩进,并不是真正意义上 ...

  3. 简单版nginx lua 完成定向流量分发策略

    本文链接:https://www.cnblogs.com/zhenghongxin/p/9131362.html 公司业务前端是使用 “分发层+应用层” 双层nginx架构,目的是为了提高缓存的命中率 ...

  4. 用redis统计大量用户的登陆情况[只判断是否活跃]

    有这样的一个场景需求:有上亿的用户,要统计这批用户的登陆情况,例如一周连续登陆,连续三天是是否登陆,一周活跃天数等用户 存在的挑战 数据如何尽可能用小的空间存储 如何能快速获取指定的数据 如果使用文件 ...

  5. Python 第三方包上传至 PyPI 服务器

    PyPI 服务器主要功能是?PyPI 服务器怎么搭建? PyPI 服务器可以用来管理自己开发的 Python 第三包. Pypi服务器搭建 Python 第三方包在本地打包 # 本地目录执行以下命令应 ...

  6. 二,PHP会话机制---session的基本使用

    1,思考:登录网站后,在每个网页都能拿到用户信息 (1) 使用超链接传递用户名,这样太繁琐了,不建议使用 . (2) 使用数据库,每打开一个页面都查询一次用户信息表,这样网页加载速度变慢,用户体验变差 ...

  7. 自己实现简单的RSA秘钥生成与加解密(Java )

    最近在学习PKI,顺便接触了一些加密算法.对RSA着重研究了一下,自己也写了一个简单的实现RSA算法的Demo,包括公.私钥生成,加解密的实现.虽然比较简单,但是也大概囊括了RSA加解密的核心思想与流 ...

  8. php if 的实现

    简单分析下php中的分支背后的实现 <?php ){ echo "a"; }else{ echo "b"; } 1.语法分析 unticked_state ...

  9. 【bzoj4240】 有趣的家庭菜园 树状数组

    这一题最终要构造的序列显然是一个单峰序列 首先有一个结论:一个序列通过交换相邻的元素,进行排序,最少的交换次数为该序列的逆序对个数 (该结论很久之前打表意外发现的,没想到用上了.....) 考虑如何构 ...

  10. h5在线1v1客服|web在线客服系统|h5即时聊天

    网上有很多环信.美恰之类的客服系统,最近也使用h5+css3+fontJs+swiper+wcPop等技术架构开发了一个在线客服(1v1沟通聊天),可以应用到在线临时聊天.在线咨询等情景.实现了消息. ...