第一章 CLR执行模型
发现看过好几遍还是会忘记,因水平有限理解的不是很到位。欢迎各位大神及时指正。
CLR执行模型
1.1编译器将源代码编译成托管模块
托管模块:是标准的windows可移植执行体文件(PE32(32位机器),或者PE32+(64位机器))它们需要CLR 才能执行
1.2 编译器将托管模块合并成程序集
托管模块有四个概念:
- PE32,PE32+文件 文件头
- CLR头 :标识了要求的CLR版本、标识、托管模块入口方法
- 元数据 :数据表集合,一方面描述了模块定义的东东,另外一方面描述了引用的一些东东。东东=类型和成员。(编译器智能感知的数据来源)
- 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做如下几件事情:
- 检测你的方法种引用的所有类型,检查之后分配一个内部结构来管理这些被引用的类型。每个类型定义的所有方法,重点(每个类型的所有方法)都有一个对应项,每个对应项都有一个地址,根据地址就能找到方法的实现。
- 初始化刚才的那个结构时候每个记录项呢都会被设置成包含在CLR内部的未编档函数(成为JITCompiler),方法内部每个方法被首次调用时候发生了如图的事情。
- 第二次执行时候下图:第二次去执行Writeline函数呢?此时内部结构中Writeline函数入口的地址指向的已经是编译好的CPU指令的地址了,所以也就不会去执行JITCompiler这个函数。
第一章 CLR执行模型的更多相关文章
- 第一章 CLR 的执行模型
CLR via C# 读书笔记:第一章 CLR 的执行模型(1) 第Ⅰ部分CLR基础.这部分为三章(第一章:CLR的只想能够模型,第二章:生成.打包.部署和管理应用程序及类型,第三章:共享程序集和强命 ...
- CLR执行模型与常见的几个概念
CLR执行模型与常见的几个概念 一.CLR执行模型 1.1从代码到程序集 CLR执行的模型是从代码开始,经过编译器生成托管模块,默认情况下可以让多个托管模块和资源生成程序集.下图为其大致过程. 1.2 ...
- CLR执行模型
好好学习底层运行机制,从CLR via C# 开始. CLR的执行模型: CLR:Common Language Runtime,是一个可由多种编程语言使用的"运行时".CLR的核 ...
- 第一章 CLR的执行模型
编译器将源代码编译为托管模块.托管木块包含: PE32或PE32+头 CLR头 元数据 IL(中间语言)代码 PE32头的文件可在32或64位的电脑上运行,PE32+的只能在64上运行.Window6 ...
- 《CLR via C#》读书笔记(1)CLR执行模型
1.1 释义 CLR 公共语音运行时 Common Language Runtime CTS 通用类型系统 Common Type System CTS.CLS是CLR的核心 CLS 通用语言规范 C ...
- CLR执行模型 流程总结(图)
如有错误,还望指出:
- CLR 的执行模型(2)
第一章 CLR 的执行模型(2) 本篇内容大纲 Framework 类库(Framework Class Library , FCL) 通用类型系统(Common Type System,CTS) 公 ...
- matlab数学实验--第一章
一. 数据和变量: 省略号(三个英文句点):表示换行 历史指令调用:用方向键上下 数据显示格式: format short ...
- [Clr via C#读书笔记]Cp1CLR执行模型
Cp1CLR执行模型 本章的概念点 CLR=Common Language Runtime 内存管理,程序集加载,安全性,异常处理和线程同步.CLR是基础,支持着面向它的各种语言.各种语言会被对应的编 ...
随机推荐
- stm32的NVIC是什么?
NVIC的全称是Nested vectoredinterrupt controller,即嵌套向量中断控制器. 对于M3和M4内核的MCU,每个中断的优先级都是用寄存器中的8位来设置的.8位的话 ...
- MYSQL—— 启动MYSQL 57 报错“The service MYSQL57 failed the most recent........等”的问题解决方式!
每天开机之后,启动MYSQL Notifier就报错,第一次出现重启电脑后解决,后面的几天老是出现,重启电脑好几次都没有解决,感觉很烦人,一定要搞定这个问题找到原因,于是有了下文....... 启动M ...
- python 模块之lxml 防xss攻击
Use lxml.html.clean! It's VERY easy! from lxml.html.clean import clean_html print clean_html(html) S ...
- 干货,一文带你超详细了解 Filter 的原理及应用
提出问题 1.我们在访问后台很多页面时都需要登录,只有登录的用户才能查看这些页面,我们需要 在每次请求的时候都检查用户是否登陆,这样做很麻烦,有没有一种方法可以在我们请求之 前就帮我们做这些事 ...
- HttpClient Received an unexpected EOF or 0 bytes from the transport stream
请求https链接时报错,奇怪的是pc1正常,pc2异常 Unhandled Exception: System.AggregateException: One or more errors occu ...
- [区块链\理解BTCD源码]GO语言实现一个区块链原型
摘要 本文构建了一个使用工作量证明机制(POW)的类BTC的区块链.将区块链持久化到一个Bolt数据库中,然后会提供一个简单的命令行接口,用来完成一些与区块链的交互操作.这篇文章目的是希望帮助大家理解 ...
- 使用NSSM把.Net Core部署至 Windows 服务
为什么部署至Windows Services 在很多情况下,很少会把.Net Core项目部署至Windows服务中,特别是Asp.net Core就更少了.一般情况下,Asp.net Core会部署 ...
- for in 和 for of 的区别
1.for...in 循环:只能获得对象的键名,不能获得键值 for...of 循环:允许遍历获得键值 var arr = ['red', 'green', 'blue'] for(let item ...
- spring boot 文件上传大小限制
错误信息 : Spring Boot:The field file exceeds its maximum permitted size of 1048576 bytes. 解决方法一:在启动类添加如 ...
- ORACLE字符集修改ORA-02374\ORA-12899\ORA-02372
IMPDP时部分日志显示这个警告ORA-02374: conversion error loading table "MEMXXX"."T_MEMBER_XXXX&quo ...