发现看过好几遍还是会忘记,因水平有限理解的不是很到位。欢迎各位大神及时指正。

CLR执行模型

1.1编译器将源代码编译成托管模块

托管模块:是标准的windows可移植执行体文件(PE32(32位机器),或者PE32+(64位机器))它们需要CLR 才能执行

1.2 编译器将托管模块合并成程序集

托管模块有四个概念:

  1. PE32,PE32+文件 文件头
  2. CLR头 :标识了要求的CLR版本、标识、托管模块入口方法
  3. 元数据 :数据表集合,一方面描述了模块定义的东东,另外一方面描述了引用的一些东东。东东=类型和成员。(编译器智能感知的数据来源)
  4. IL代码(中间语言)运行时候将IL代码转化为本机cpu指令

多个托管模块合并成程序集

1.3 加载公共语言运行时(CLR)(双击可运行程序时候加载)

电脑上安装了.NET Framework。打开exe程序的时候,windows系统检查EXE文件头,决定加载64还是32位的MSCorEE.dll,进程的主线程调用MSCorEE.dll 的一个方法,这个方法会初始化CLR,再加载exe程序集,然后调用exe的入口方法即main函数。随即托管应用程序启动并且运行。

CLR的核心功能:

内存管理、程序集加载、安全性、异常处理和多线程

因此面向CLR编程的所有语言都具有以上特性

1.4执行程序集的代码

执行过程:运行可执行文件时候,先是FrameWork 初始化了CLR,CLR有托管模块的入口方法。执行exe之前CLR做如下几件事情:

  1. 检测你的方法种引用的所有类型,检查之后分配一个内部结构来管理这些被引用的类型。每个类型定义的所有方法,重点(每个类型的所有方法)都有一个对应项,每个对应项都有一个地址,根据地址就能找到方法的实现。
  2. 初始化刚才的那个结构时候每个记录项呢都会被设置成包含在CLR内部的未编档函数(成为JITCompiler),方法内部每个方法被首次调用时候发生了如图的事情。

  1. 第二次执行时候下图:第二次去执行Writeline函数呢?此时内部结构中Writeline函数入口的地址指向的已经是编译好的CPU指令的地址了,所以也就不会去执行JITCompiler这个函数。

第一章 CLR执行模型的更多相关文章

  1. 第一章 CLR 的执行模型

    CLR via C# 读书笔记:第一章 CLR 的执行模型(1) 第Ⅰ部分CLR基础.这部分为三章(第一章:CLR的只想能够模型,第二章:生成.打包.部署和管理应用程序及类型,第三章:共享程序集和强命 ...

  2. CLR执行模型与常见的几个概念

    CLR执行模型与常见的几个概念 一.CLR执行模型 1.1从代码到程序集 CLR执行的模型是从代码开始,经过编译器生成托管模块,默认情况下可以让多个托管模块和资源生成程序集.下图为其大致过程. 1.2 ...

  3. CLR执行模型

    好好学习底层运行机制,从CLR via C# 开始. CLR的执行模型: CLR:Common Language Runtime,是一个可由多种编程语言使用的"运行时".CLR的核 ...

  4. 第一章 CLR的执行模型

    编译器将源代码编译为托管模块.托管木块包含: PE32或PE32+头 CLR头 元数据 IL(中间语言)代码 PE32头的文件可在32或64位的电脑上运行,PE32+的只能在64上运行.Window6 ...

  5. 《CLR via C#》读书笔记(1)CLR执行模型

    1.1 释义 CLR 公共语音运行时 Common Language Runtime CTS 通用类型系统 Common Type System CTS.CLS是CLR的核心 CLS 通用语言规范 C ...

  6. CLR执行模型 流程总结(图)

    如有错误,还望指出:

  7. CLR 的执行模型(2)

    第一章 CLR 的执行模型(2) 本篇内容大纲 Framework 类库(Framework Class Library , FCL) 通用类型系统(Common Type System,CTS) 公 ...

  8. matlab数学实验--第一章

    一.            数据和变量: 省略号(三个英文句点):表示换行 历史指令调用:用方向键上下 数据显示格式:                    format short          ...

  9. [Clr via C#读书笔记]Cp1CLR执行模型

    Cp1CLR执行模型 本章的概念点 CLR=Common Language Runtime 内存管理,程序集加载,安全性,异常处理和线程同步.CLR是基础,支持着面向它的各种语言.各种语言会被对应的编 ...

随机推荐

  1. YAML基础教程

    一.YAML介绍YAML参考了其他多种语言,包括:XML.C语言.Python.Perl以及电子邮件格式RFC2822.Clark Evans在2001年5月在首次发表了这种语言,另外Ingy döt ...

  2. Eigen实现坐标转换

    (<视觉SLAM十四讲>第三讲习题7)设有小萝卜一号和二号在世界坐标系中.一号位姿q1 = [0.35, 0.2, 0.3, 0.1],t1=[0.3, 0.1, 0.1].二号位姿q2= ...

  3. Java后端框架之Spring Boot详解,文末有Java分布式实战项目视频可取

    在 Java 后端框架繁荣的今天,Spring 框架无疑是最最火热,也是必不可少的开源框架,更是稳坐 Java 后端框架的龙头老大. 用过 Spring 框架的都知道 Spring 能流行是因为它的两 ...

  4. 华为手机无法使用USB调试的解决方案

    在Android开发中,一直在使用华为的荣耀8进行调试,但是突然某一次,发现USB调试无法使用了,且在其他的电脑上进行调试也不行. 后来经过查资料,总算解决了此问题,在这里进行一下解决方案的记录. 需 ...

  5. java数据结构和算法01(数组的简单使用)

    一直都对这一块没有什么想法,加上不怎么理解,只是懂个大概:最近突然感觉对数据结构和算法这块有点儿兴趣,决定还是尽量详细的看看这些结构和算法: 话说什么事数据结构和算法呢?现在我也说不上来,等我学的差不 ...

  6. Asp.Net Core&钉钉开发系列

    阿里钉钉在商业领域的规模越来越大,基于钉钉办公的企业越来越多,将一个企业内现有用到的工具(如钉钉)能够更融入到他们的工作中,提高工作效率,那便需要开发者不断的学习.应用了,同时,个人也有一个预感,未来 ...

  7. 「拥抱开源, 又见 .NET」系列第三次线下活动简报

    「拥抱开源, 又见 .NET」 随着 .NET Core的发布和开源,.NET又重新回到人们的视野. 自2016年 .NET Core 1.0 发布以来,其强大的生命力让越来越多技术爱好者对她的未来满 ...

  8. C#开发APP,ToolBar控件在Smobiler中的使用方式【附案例源码】——Smobiler移动开发平台

    控件说明 底部工具栏控件. 效果演示 其他效果 该界面为仿淘宝UI制作的一个简单的UI模板,源码获取方式请拉至文章末尾. 特色属性 属性 属性说明 Direction(相对布局) 容器主轴方向. Fl ...

  9. 我学Java我傲娇

    今天,终于把学习了一年多的<Java核心技术36讲>第一遍完结了,历时一年多,花出去的钱终于感觉有了第一笔回报. 这是我在极客时间的第一门付费课程,刚出来的时候,正巧自己转到全职Java开 ...

  10. css,解决文字与图片对齐的问题

    测试代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...