前言:
  买了这本 CLR via C# 已有些日子了,但是一直没有认真翻过这本书,以前学的知识点都忘光了。
  趁着现在下着雨的周末,大体记录一下今天了解的笔记,也好弥补一下 C# 知识上的一些盲点。

 
编译/执行过程:
  C# 发展史、借助于谁谁谁,废话都跳过,看图:
  

  // 注明:为了节省时间,此图非 书中原图;

  名词注解:
  CLR:公共语言运行时(Common Language Runtime),是多种语言使用的“运行时”,只运行(解释)托管模块(IL)
    // .NET 下受托管的 dll、exe 文件需要依赖于 CLR 才能解释运行;(也是所谓的 C# 虚拟机 解释型语言)
  IL:中间语言(Intermediate Language);编译器编译源代码时生成的代码。在运行时,CLR 将它编辑成本机 CPU 指令;
    // C#、VB 等编译器,编译出的文件(程序集)IL,又称“托管模块”(包含中间语言和元数据)
    托管模块组成部分:
      托管头标识(PE32、PE32+)理解成 x32、x64;
      CLR 头,包含要求的 CLR 版本等一些标识信息;
      元数据:描述源代码中定义类和成员、以及代码引用的类和成员;      // Visual Studio IDE 的智能感知提示,就是通过它。
  JIT:CLR 编译器,负责将 IL 编译成本机机器代码(CPU 指令);
    // JITCompiler 时会将本机代码进行优化后再度丢给 CPU 执行;

 
     // C# 编译器已经优化的非常不错了,一个开发语言的好坏多半都取决于他们的编译器做的好坏。
     // 感兴趣的用 IL_DASM 反编译出来看看,也可以看看国外一些专门做编译器的公司,此文不对编译过程做解释;

浅谈 C# CLR 执行模块的更多相关文章

  1. 浅谈 JavaScript new 执行过程及function原理

    前言 最近在学习JavaScript语言精粹,感觉写得相当不错.所以这里也算是总结一下.一个方法使用new的方式创建到底是怎样的过程,一个function的声明内部又是怎样执行的呢 另外学的过程中,不 ...

  2. 浅谈javascript引擎执行代码的步骤-(2019-2)

    平时面试经常会遇到类似下面的这种题,而且千变万化,让人一个头两个.示例这道题算是稍微有点难度的了,这种题考查的是JavaScript引擎执行代码的步骤. b = 'cba'; function a(a ...

  3. 浅谈javascript函数执行过程

    javascript函数执行过程: 1. 为函数创建一个执行环境 2. 复制函数的 [[scopes]] 属性中的对象构建起执行环境的作用链域 3. 创建函数活动对象并推入执行环境作用链域的前端 4. ...

  4. 浅谈nodejs中HTTP模块应用

    这里给大家分享下后端人员如果利用nodejs对数据的一些处理情况  适用于初学者使用 大牛勿喷 给大家分享下主要后端思想部分代码,前端部分就不展示了 const http = require(&quo ...

  5. 浅谈线程池(上):线程池的作用及CLR线程池

    原文地址:http://blog.zhaojie.me/2009/07/thread-pool-1-the-goal-and-the-clr-thread-pool.html 线程池是一个重要的概念. ...

  6. 浅谈Python时间模块

    浅谈Python时间模块 今天简单总结了一下Python处理时间和日期方面的模块,主要就是datetime.time.calendar三个模块的使用.希望这篇文章对于学习Python的朋友们有所帮助 ...

  7. 浅谈 js 正则字面量 与 new RegExp 执行效率

    原文:浅谈 js 正则字面量 与 new RegExp 执行效率 前几天谈了正则匹配 js 字符串的问题:<js 正则学习小记之匹配字符串> 和 <js 正则学习小记之匹配字符串优化 ...

  8. 浅谈SQL优化入门:1、SQL查询语句的执行顺序

    1.SQL查询语句的执行顺序 (7) SELECT (8) DISTINCT <select_list> (1) FROM <left_table> (3) <join_ ...

  9. 浅谈Java语言中try{}catch{}和finally{}的执行顺序问题

    浅谈Java语言中try{}catch{}和finally{}的执行顺序问题 2019-04-06  PM  13:41:46  1. 不管有没有出现异常,finally块中代码都会执行: 2. 当t ...

随机推荐

  1. Linux centos下设置定时备份任务

    实现准备 # 需要备份文件路径:/opt/apollo/logs/access_log [root@localhost opt]# cd apollo/ [root@localhost apollo] ...

  2. 生产者,消费者,CDN

    1 生产者消费者模型应用场景及优势? 什么是生产者消费者模型 在 工作中,大家可能会碰到这样一种情况:某个模块负责产生数据,这些数据由另一个模块来负责处理(此处的模块是广义的,可以是类.函数.线程.进 ...

  3. http请求设置setConnectTimeout()方法超时无响应

    相信非常多小伙伴在写 HttpURLConnection中都设置了setConnectTimeout()方法.目的就是在网络不好的情况下超时返回 然而我们设置的setConnectTimeout()并 ...

  4. Oracle学习笔记—Oracle左连接、右连接、全外连接以及(+)号用法(转载)

    转载自: Oracle左连接.右连接.全外连接以及(+)号用法 对于外连接,Oracle中可以使用“(+)”来表示. 关于使用(+)的一些注意事项: (+)操作符只能出现在WHERE子句中,并且不能与 ...

  5. Spark架构解析(转)

    Application: Application是创建了SparkContext实例对象的Spark用户,包含了Driver程序, Spark-shell是一个应用程序,因为spark-shell在启 ...

  6. OpenGL学习进程(6)第四课:点、边和图形(一)点

    本节是OpenGL学习的第四个课时,下面介绍OpenGL点的相关知识:     (1)点的概念:     数学上的点,只有位置,没有大小.但在计算机中,无论计算精度如何提高,始终不能表示一个无穷小的点 ...

  7. Nginx负载均衡案例

    nginx负载均衡配置,windows版本和linux版本的nginx除了启动方式其他基本无差异. 1.Niginx安装 参考:https://www.cnblogs.com/zwcry/p/9454 ...

  8. 手机端的META差异

    手机端的META你了解多少? 我们先来简单了解下meta标签:meta指元素可提供有关页面的元信息(meta-information),比如针对搜索引擎和更新频度的描述和关键词. 标签位于文档的头部, ...

  9. ETL应用:使用Pro*C写入文件信息入库的方法

    ETL处理过程中,经常需要进行文件校验,如文件级校验.记录级校验,需要保存文件的基本信息,文件名.文件大小.数据日期等,使用Pro*C的一种方法如下: #include <stdio.h> ...

  10. HAproxy 介绍

    HAproxy 介绍 (1)HAProxy 是一款提供高可用性.负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,支持虚拟主机,它是免费.快速并且可靠的一种解决方案. HAProxy ...