第一章 CLR的执行模型

概念篇

  • CLR(Common Language Runtime)【公共语言运行时】

可由多种编程语言使用的运行环境,提供内存管理、程序集加载、安全性、异常处理和线程同步等支持。

  • CTS(Common Type System)【通用类型系统】

规范化的类型定义和管理,比如:字段、方法等, 又比如继承等特性。

  • CLS(Common Language Specification)【公共语言规范】

针对CLR/CTS定义的最基本的组建。

  • Manuged Module【托管模块】

标准的32位Mircorsofte Windows 可移植执行提(PE32)文件、或者是标准的64位Windows 可移植执行体(PE32+)文件。

  • Managed Code【托管代码】【中间代码(IL)】

编译器编译源代码是生成的代码

  • Assembly【程序集】

一个或多个模块、资源文件的逻辑性分组

CLR执行模型

程序的编译过程

说明:

  1. 步骤1:C#编译器将C#源文件编译为托管模块
  2. 步骤2:将生成的托管模块编译为程序集

CLR是针对程序集进行工作。

在细说托管模块和程序集的构成

  1. 托管模块

PE32或PE32+


标准的windows PE文件头

标识了文件类型,包括GUI、CUI、或者DLL,并包含一个时间标记来指出文件的生成时间


CLR头


包含使这个模块成为托管代码的信息,头中包含CLR版本、一些标识,托管模块入口方法(main)的MethodDef元数据token以及模块的元数据、资源、强名称,一些标识及其他不太重要的数据项的位置和大小。


元数据


主要是两种表:一种表述源代码中定义的类型和成员;一种描述源代码中引用的类型和成员。


IL代码


编译器将源代码生成的中间代码。

2、程序集

编译器根据PE32的清单文件,该清单文件中包含构成程序集的文件,程序集中的文件所实现的公开导出的类型以及程序及关联的资源和数据文件。编译器默认将生成的托管模块转为程序集。

主要使用的工具包含:CSC.exe(C#编译器)、AL.exe(程序集链接器)。

参考文档:

1、PE结构详解:http://blog.csdn.net/reversalc/article/details/8022977

2、CSC.exe的命令行使用:http://blog.csdn.net/reversalc/article/details/8022977

3、CLR完全介绍:http://www.cnblogs.com/emanlee/archive/2008/10/16/1312984.html

4、CLR简单介绍(包含执行过程):http://www.cnblogs.com/lufangtao/archive/2012/06/07/2539915.html

时间: 2024-10-18 16:43:12

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

第1章CLR的执行模型1.1

1.1将源代码编译成托管代码模块 如上图,用支持CLR的任何一种语言来创建源代码文件.再用一个对应的编译器来检查语法和分析源代码.经编译器编译后生成托管模块(managed module),它是一个可移植执行体文件,它可能是32位(PE32)文件,也可能是64位(PE32+)文件.托管模块包括中间语言和元数据,需要CLR才能执行. 公共语言运行时(Common Language Runtime, CLR)是一个供多种编程语言使用的运行时.可用任何编程语言来开发代码,只要编译器是面向CLR的就行.

01.由浅入深学习.NET CLR 基础系列之CLR 的执行模型

.Net 从代码生成到执行,这中间的一些列过程是一个有别于其他的新技术新概念,那么这是一个什么样的过程呢,有什么样的机制呢,清楚了这些基本的东西我们做.Net的东西方可心中有数.那么,CLR的执行模型是一个什么样的过程呢? 将源代码编译成托管模块 --> 将托管模块合并成程序集 --> 加载公共语言运行时 --> 执行程序集的代码 目录 将源代码编译成托管模块 将托管模块合并成程序集 加载公共语言运行时 执行程序集的代码 本地代码生成器:NGen.exe Framwork类库入门 通用类

第一章、 CLR的执行模型

1. 概述 本章主要是介绍从源代码到可执行程序的过程中,CLR所做的工作. 2. 名词解释 ① 公共语言运行时(Common Language Runtime, CLR),是一个可由多种语言使用的 运行时,核心功能(内存管理.程序集加载.安全性.异常处理和线程同步)可由面向CLR的所有语言使用. ② PE32:32位 Microsoft Windows 可移植执行体.    PE32+:64位 Microsoft Windows 可移植执行体. ③ 元数据 是一组数据表,这些数据表描述了 模块中

【C#进阶系列】01 CLR的执行模型——一个Hello World的故事

好吧,废话少说,先上一章Hello World图: 我们有了一个Hello world程序,如此之简单,再加上我今天没有用汉字编程o(>﹏<)o,所以一切很简单明了. 故事开始: 编译: 一个程序写完肯定要编译,以前什么C啊什么的都是编译成本机的CPU指令,但是我们的C#不是. C#,VB.NET都会把它们编译成托管模块,托管模块在一个标准的可移植的PE文件中.(那些懵懂的少年肯定慌了,这是什么鬼,又是托管模块又是PE文件的.莫慌,所有你听不懂的高大上的术语其实都很简单,你现在不需要懂,听我慢

CLR的执行模型(4):执行程序集的代码

一直觉得,一本书的第一章是一定要读通的,这样子才知道这本书适不适合自己.所以,对于第一章的内容,我就啰嗦一些了. 托管程序集同时包含元数据和IL.IL是和CPU无关的机器语言,并且比大多数CPU语言都高级.IL能访问和操作对象类型,并且提供了创建和初始化对象的指令.调用对象上的虚方法以及直接操作数组元素.甚至实现了抛出和捕捉异常的指令,所以可将IL看成一种机器语言. 为了执行方法,首先必须吧方法的IL转换成本机CPU指令.这是CLR的JIT的职责. 下图展示了一个方法首次调用时候发生的事情: 在

01 CLR 的执行模型

1.先将不同语言的代码生成托管模块. 如图,每个语言有自己对应的编译器. 和普通编译器不同,这个编译器是生成IL代码,不是直接的机器码. 编译也就是我们平时生成的过程. f5 c# 调用 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe (我是这个版本,不同版本路径不同) 来编译. 也就是说.其实如果你不VS做开发, 可以只安装 .net Framework,写好代码之后通过它来编译 无视那个警告. 这就编译好了. 他可以是一个 DL

01.CLR的执行模型

在非托管的C/C++中,可以进行一些底层的操作 "公共语言运行时"(CLR)是一个可由多种编程语言使用的"运行时" CLR的核心功能包含: 内存管理 程序集加载 安全性 异常处理 线程同步 可由支持CLR的编程语言编写源代码,再由对应的编译器检查语法和分析源代码,最后都会生成托管模块,托管模块需要CLR才能执行 托管模块的组成: PE32或PE32+头:包含与本地CPU代码相关信息 CLR头:托管模块的头信息,包含CLR版本,一些标志等 元数据:元数据表,包含源代码

clr的执行模型(中)

1.1   执行程序集的代码 托管程序集包含IL和元素据.某种程度上IL可以当作面向对象的机器语言. 为了执行方法,需要把IL转换成本机CPU指令,由clr的JIT(just-in-time,即时)编译器完成.需要注意的是:Jit将cpu指令存在内存,程序终止时,需要重新编译cpu指令.性能方面,对大多数程序JIT造成的性能损失不显著. 1.1.1    IL与验证 IL是基于栈的,指令需要压入与弹出. IL编译成cpu指令时,CLR会执行 验证(verification)的过程,检查高级IL代

第一章 Java代码执行流程

说明:本文主要参考自<分布式Java应用:基础与实践> 1.Java代码执行流程 第一步:*.java-->*.class(编译期) 第二步:从*.class文件将其中的内容加载到内存(类加载)(运行期) 第三步:执行代码(运行期) 2.代码编译 javac命令将源码文件编译为*.class文件. 后边将介绍: javac将*.java编译成*.class文件的过程 class文件的文件格式,以及其存储的内容 3.类加载 主要是指将*.class文件加载到JVM,并形成Class对象的机