第一章、 CLR的执行模型

1. 概述

   本章主要是介绍从源代码到可执行程序的过程中,CLR所做的工作。

2. 名词解释

  ① 公共语言运行时(Common Language Runtime, CLR),是一个可由多种语言使用的 运行时,核心功能(内存管理、程序集加载、安全性、异常处理和线程同步)可由面向CLR的所有语言使用。

  ② PE32:32位 Microsoft Windows 可移植执行体。

      PE32+:64位 Microsoft Windows 可移植执行体。

  ③ 元数据 是一组数据表,这些数据表描述了 模块中定义的内容 或者 托管模块引用的内容。

  ④ 托管模块 是一个标准的PE32或者PE32+文件,他们都需要CLR才能执行。由 PE32(+)头、CLR头、元数据 及 IL中间代码 组成。

  ⑤ 程序集 是一个或多个模块/资源文件的逻辑性分组,是重用、安全性以及版本控制的最小单元。

  ⑥ 清单(manifest) 是由 元数据表 构成的另一种集合,描述了构成程序集的文件。

  ⑦ 本地代码生成器(NGen.exe),将IL代码编译成本地代码。

  ⑧ Framework类库(FCL),Microsoft发布的一组DLL程序集的统称。

  ⑨ 通用类型系统(Common Type System, CTS):Microsoft制定的,描述类型定义和行为的规范。

  ⑩ 公共语言规范(Common Language Specification, CLS): 定义了一个最小功能集。任何编译器生成的类型要想兼容于由其他“符合CLS、面向CLR“的语言所生成的组件,就必须支持这个功能集。

3. 执行过程

  ① 将源代码编译成托管模块。

  ② 将托管模块合并成程序集。(程序集链接器AL.exe)

  ③ 加载公共语言运行时。

  ④ 执行程序集的代码。

    CLR的JIT(just-in-time)编译器将IL转换成本地cpu指令。

    一次编译,多次运行。期间进行代码优化。

  ⑤ 与非托管代码的互操作性。

4. 总结

  介绍CLR相关的各个部分,概述CLR的执行逻辑。

时间: 2024-12-25 06:09:25

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

第一章 CLR的执行模型

概念篇 CLR(Common Language Runtime)[公共语言运行时] 可由多种编程语言使用的运行环境,提供内存管理.程序集加载.安全性.异常处理和线程同步等支持. CTS(Common Type System)[通用类型系统] 规范化的类型定义和管理,比如:字段.方法等, 又比如继承等特性. CLS(Common Language Specification)[公共语言规范] 针对CLR/CTS定义的最基本的组建. Manuged Module[托管模块] 标准的32位Mircor

第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类库入门 通用类

【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对象的机