首先简单说一下计算机软件运行。所谓软件运行,就是一步一步做一些事情。计算机只认识0和1.给计算机下命令,只能是0与1的方式,确切的说,其实是CPU只认识0和1,因为软件运行是CPU控制的。人直接操作0与1是不现实的,非常复杂。所以我们需要一种接近于自然语言的方式,人能看得懂的东西,即代码。

在C语言的方式下,编译运行的过程是怎样的呢?

如图所示,从一段printf代码到计算机运行输出的过程。编译器即中介,把代码翻译成机器认识的0与1的编码。编译器与硬件紧密相连,Windows下的编译器跟Linux下的编译器是不同的,并且编译出来的东西也是不同的,只能在各自的平台上运行。编译器只认识C语言。编译器编译出来的exe文件CPU就可以直接读懂并且运行,就像一个能听懂0与1的耳朵。

在.Net的模式下,编译运行又是怎样的一种模式呢?

微软推行.NET平台的同时,推出了强大的Framework. 在XP系统的时候需要自行安装Framework, 在Win7系统中已经自动集成了。Framework的强大,再于面向对象的基础类库与运行时CLR. 基础类库即编程时可以使用的工具类,这里不多说,着重说一下CLR.运行时是程序运行的监管者,程序运行起来运行的怎么样了,是否对内存有太大的消耗,是否对内存进行整理清空,出现异常怎么进行处理,在运行时中都有相应的对策。

这里的编译器与上边的编译器不太一样。在编译的过程中,并没有编译成CPU认识的编码,而是CLR认识的编码。在编译的过程中,把框架库中的东西加进来了。编译完成结果是exe文件,但是这个exe文件是IL文件,是不能被CPU识别的,只能被CLR识别。双击这个文件,CLR会把其加载到内存中,这时要出场的就是及时编译器JIT. 及时编译器的作用就是识别IL文件,然后操作CPU去完成相应的操作。即由运行时将exe转换成CPU认识的0与1编码,操作计算机。

这里涉及到了一个概念是多语言平台的混合编程。
IL中间文件是一种标准,一种规范。只要符合这种规范的文件,都能被CLR识别运行。C#,F#,VB,编写的代码,只要提供相应的编译器,编译出来的东
西都能被CLR识别运行。而且这里为跨平台做了很好的准备。因为IL的规范是确定了的,对于C#程序的移植,比如说移植到Linux上,我们只需要有一个
能在Linux上运行的CLR就行了,这个CLR能识别在Windows上编译好的IL运行。Mono就是很好的一个例子。

上图是整个流程。还有要说明的几点。如果你
的电脑上安装后Framework,
在类似于C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe这样的路径中,找到这个CSC文
件。其实这个就是Framework的编译器。大家在使用VS的时候,按F6就进行编译,其实调用的是这个文件。或许我们直接使用命令行,都可以编译我们
写好的文件txt文件,不过还是要改后缀名为cs.

.Net的运行效率其实完全决定于JIT.

将中间语言代码根据当前的硬件与软件环境,进行运行时编译,并缓存代码。及时编译器会根据操作系统与操作系统与硬件环境对代码优化。CLR是托管代码,加
了中间层,为什么效率还高?这是JIT决定的。根据硬件平台来编译,而不是每一句代码都编译。例如空的for循环是不进行编译,提高效率。如果代码中有很
多次调用一个方法,那么CLR在JIT编译这个代码第一次以后就会将已经编译好的代码缓存起来,下一次在使用的时候,不去编译了,直接从缓存中取出编译好
的代码执行即可。还有垃圾回收机制,将不用的或者不常用的代码删除掉,如果再要使用,重新创建。整理内存,使得内存连续。

.Net编译原理简单介绍的更多相关文章

  1. Docker系列之原理简单介绍

    目录 1.1.Docker架构简介 1.2.Docker 两个主要部件 1.3.虚拟机和Docker对比: 1.4.Docker内部结构 Docker系列之原理简单介绍 @ Docker是一个开源的应 ...

  2. LDAP服务器的概念和原理简单介绍

    LDAP服务器的概念和原理简单介绍 1. 目录服务 目录是一个为查询.浏览和搜索而优化的专业分布式数据库,它呈树状结构组织数据,就好象Linux/Unix系统中的文件目录一样.目录数据库和关系数据库不 ...

  3. CAS单点登录原理简单介绍

    1. SSO简介 1.1 单点登录定义 单点登录(Single sign on),英文名称缩写SSO,SSO的意思就是在多系统的环境中,登录单方系统,就可以在不用再次登录的情况下访问相关受信任的系统. ...

  4. Android通过辅助功能实现抢微信红包原理简单介绍

    简书文章:https://www.jianshu.com/p/e1099a94b979 附抢红包开源项目地址,代码已全改为Kotlin了,已适配到最新微信7.0.5版本,如果对你有所帮助赏个star吧 ...

  5. 编译原理简单语法分析器(first,follow,分析表)源码下载

    编译原理(简单语法分析器下载) http://files.cnblogs.com/files/hujunzheng/%E5%8A%A0%E5%85%A5%E5%90%8C%E6%AD%A5%E7%AC ...

  6. dubbo学习过程、使用经验分享及实现原理简单介绍

    一.前言 部门去年年中开始各种改造,第一步是模块服务化,这边初选dubbo试用在一些非重要模块上,慢慢引入到一些稍微重要的功能上,半年时间,学习过程及线上使用遇到的些问题在此总结下. 整理这篇文章差不 ...

  7. 【Dubbo基础】dubbo学习过程、使用经验分享及实现原理简单介绍

    一.前言 部门去年年中开始各种改造,第一步是模块服务化,这边初选dubbo试用在一些非重要模块上,慢慢引入到一些稍微重要的功能上,半年时间,学习过程及线上使用遇到的些问题在此总结下. 整理这篇文章差不 ...

  8. Net编译原理简单

    转载:http://blog.csdn.net/sundacheng1989/article/details/20941893 首先简单说一下计算机软件运行.所谓软件运行,就是一步一步做一些事情.计算 ...

  9. Git学习笔记1--Git原理简单介绍

    Git是一个分布式的版本号控制工具,假设想用github等版本号控制系统,核心就是git,以下简介一些git的基础原理,原文:http://git-scm.com/book/en/Getting-St ...

随机推荐

  1. Zabbix利用orabbix插件监控Oracle数据库

    一.jdk的安装(Orabbix Server) 1.软件解压,放到固定位置 1 2 tar zxf jdk-8u51-linux-x64.tar.gz mv jdk1.8.0_51/ /usr/lo ...

  2. 删除win7任务栏通知区域图标的方法

    大家都知道程序运行后会在任务栏的通知区域显示表明正在运行,但是有很多失效的图标也会在此显示,那么怎么样删除那些没用的图标呢? 1.在开始运行里输入:regedit进入注册表编辑器 2.进入注册表编辑器 ...

  3. TensorFlow安装教程(ubuntu 18.04)

    此教程的硬件条件: 1.Nvidia GPU Geforce390及以上 2.Ubuntu 18.04操作系统 3.Anaconda工具包 如果python版本为3.7及以上,使用如下命令降级到3.6 ...

  4. Shiro 五张表

    参考博客: http://blog.csdn.net/frankcheng5143/article/details/50836619 Filter:运行过程中改变进入资源的请求和资源返回的响应中的有效 ...

  5. Linux下使用OTL操作mysql数据库

    首先重点推荐介绍otl介绍及用法的文章:http://www.cnblogs.com/fnlingnzb-learner/p/5835560.html 一.编写代码 注:以下代码来自OTL示例,略有改 ...

  6. Java动手及实验整理

    1   枚举类型 在Java中,枚举类型本质上其实就是一个类,枚举中的常量都是该枚举类型的实例.枚举类型是引用类型!枚举不属于原始数据类型,它的每个具体值都引用一个特定的对象.相同的值则引用同一个对象 ...

  7. npm指南

    什么是 NPM npm 之于 Node ,就像 pip 之于 Python , gem 之于 Ruby , pear 之于 PHP . npm 是 Node 官方提供的包管理工具,他已经成了 Node ...

  8. vue打印html

    # vue打印功能 console.log(data.doPrint); // html字符串 let newContent =data.doPrint; let oldContent = docum ...

  9. Tomcat启动报错:Possible root causes include a too low setting for -Xss and illegal cyclic inheritance dependencies

    错误代码如下: Caused by: java.lang.IllegalStateException: Unable to complete the scan for annotations for ...

  10. Windows下python库的常用安装方法

    目录:       1.pip安装(需要pip)       2.通过下载whl文件安装(需要pip)       3.在pythn官网下载安装包安装(不需要pip)   方法一:pip安装. 这是最 ...