CLR执行模型

1:首先先明确CLR的概念:

1:首先先明确CLR的概念:

 CLR(Common Language Runtime):公共语言运行时,是一个可由多种编程语言使用的"运行时";

  在运行时,CLR根本不关心开发人员用的是哪一种语言来变写代码,它只关注语言是否是面向CLR(面向运行时)的.

2:CLR的核心功能包括:

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

3:如图:

无论是用的是哪一种编译器,结果都是一个托管模块(managed module),托管代码时一个标准的32位/64位Microsoft Windows可移植执行体(PE32/PE32+)文件.

本地代码编译器,生成的是面向特定CPU架构(X86,X64或IA64)的代码.相反,每个面向CLR的编译器生成的都是IL(中间语言)代码,IL代码也被称为托管代码.

除了生成IL,面向CLR的每个编译器还要在每个托管模块中生成完整的元数据,元数据是一组数据表.其中一些数据表描述了模块中定义的内容,元数据其实就是编译器所生成的一些完整数据.

4:CLR实际是不和模块一起工作的,它是和程序集一起工作的.

5:加载公共语言运行时

  我们生成的每个程序集既可以是一个可执行应用程序,也可以是一个DLL,最终是由CLR管理这些程序集中的代码的执行,所以必须在运行机器中安
装.NET FrameWork.WIndows一些版本系统已经内置打包了好了.NET
FrameWork.不过需要我们手动的开启.可以在控制面板中进行启动在此就不做详细解释.作为开发人员,这是不需要解释的.

6:执行程序集的代码

执行一个方法,第一必须把它的IL转换为本地CPU指令,这是CLR的JIT的本质.

如图:

就在Main方法执行之前,CLR会检测Main的代码引用的所有的类型,这导致CLR分配一个内部数据结构,用于管理对所引用的类型的访问.

一个方法只有在首次调用时,才会造成一些性能损失,以后对该方法的所有调用都以本地代码的形式全速运行.无需重新验证IL并把它编译成本地代码.

JIT编译器将本地CPU指令存储到动态内存中,一旦应用程序终止,编译好的代码也会被丢弃,所以,如果将来再次运行应用程序,或者同时启动应用程序的两个实例,JIT编译器必须再次将IL编译成本地指令.

6:IL验证.

IL是基于栈的,所以它的所有指令都要将操作数压入(push)一个执行栈,并从栈
弹出(POP)结果.由于IL没有提供操作寄存器的指令,所以人们可以很容易地创建新的语言和编译器,生成CLR的代码.IL指令是无类型的.IL的好处
在于是健壮和安全的,因为它编译为CPU指令,CPU会进行验证是否安全.

7:Framework类库

  FCL(Framework Class Library):是一组DLL程序集的统称,其中含有很多的类型定义,每个类型都公开了一些功能.

  Web服务:Web service 技术或者WCF技术,可以非常简单的处理通过Internet发送的消息.

  Web窗体应用程序:Web Form

  Windows应用程序:开发windows GUI应用程序.

  富Internet应用程序:Silverlight技术,可以构建通过Internet来部署的GUI应用程序.这种程序能在Web浏览器的内部或外部运行,还可以在非Windows操作系统与移动设备傻瓜运行.

  Window控制台:提供简单快捷方便的方式,生成应用程序,编译器.

  Window服务:可以通过.NET FrameWork 生成"服务"应用程序.

  数据库存储过程:编写存储过程

  组件库:.NET FrameWord允许生成独立的程序集(组件),其中包含的类型可以轻松集成到任意的程序库中.

CLR执行模型,布布扣,bubuko.com

时间: 2024-12-29 09:18:16

CLR执行模型的相关文章

CLR执行模型《CLR via c#》第一章

这是我看<CLR via c#>第四版的一些小笔记和总结,如有不对的地方,欢迎指出. <CLR via c#>第一章CLR的执行模型讲的是如何将源代码生成为一个应用程序,或者生成为一组可重新分发的组件(文件)- 这些组件(文件)包含类型(类和结构等),解释了应用程序如何执行. CLR(common language runtime ,公共语言运行时),顾名思义,它是一个可以支持多种语言的“运行时”. 通常我们c#程序的执行过程是 CLR的JIT(即时编译器)把IL代码编译成机器指令

1.CLR执行模型

1.1 释义 CLR 公共语音运行时 Common Language Runtime CTS 通用类型系统 Common Type System CTS.CLS是CLR的核心 CLS 通用语言规范 Common Language Specification CLS是CTS的子集 IL 托管代码 栈 COM 类型库 Type Library IDL 接口定义语音 Interface Definition Language FCL FrameWork类库 Framework Class Librar

CLR执行模型简介

1:首先先明确CLR的概念: CLR(Common Language Runtime):公共语言运行时,是一个可由多种编程语言使用的"运行时"; 在运行时,CLR根本不关心开发人员用的是哪一种语言来变写代码,它只关注语言是否是面向CLR(面向运行时)的. 2:CLR的核心功能包括: 内存管理.程序集加载.安全性.异常处理和线程同步. 3:如图: 无论是用的是哪一种编译器,结果都是一个托管模块(managed module),托管代码时一个标准的32位/64位Microsoft Wind

第一章 CLR的执行模型

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

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

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

CLR的执行模型(3):加载

加载: 生成的每一个程序集,既可以是可执行应用程序,也可以是DLL.当然,最终是由CLR管理这些程序集中的代码执行.是否能执行,检查本机中是否安装.net Framework即可. 可执行文件在运行时,Windows检查文件头,判断需要32位还是64位地址空间.Windows还会检查头中嵌入的CPU架构信息,确保当前CPU架构符合要求. WIndows检查EXE文件头,决定创建32位还是64位进程之后,会在进程空间加载MSCorEE.dll的x86,x64或者AMR版本.然后.进程的主线程调用M

ASP.NET执行模型之IIS服务器处理流程

之前在网上看过很多对这方面的讲解,但个人觉得看下来过于 "深奥",不容易理解,所以想用更简单的方式进行阐述,便于理解. 本次我们重点分析用户请求到页面呈现过程中Web服务器的处理过程.我们从ASP.NET站点的一个页面请求开始说起,先看下面对于某个请求的简单执行模型 (注意这是对asp.net站点Index.aspx页面的第一次请求,所以需要进行动态编译): 我们通过ASP.NET的执行模型简单的描述了一次web请求过程,注意在不同的IIS版本中,处理模型和通信方式是不一样的,在IIS

01_CLR执行模型

1:首先先明确CLR的概念: CLR(Common Language Runtime):公共语言运行时,是一个可由多种编程语言使用的"运行时"; 在运行时,CLR根本不关心开发人员用的是哪一种语言来变写代码,它只关注语言是否是面向CLR(面向运行时)的. 2:CLR的核心功能包括: 内存管理.程序集加载.安全性.异常处理和线程同步. 3:如图: 无论是用的是哪一种编译器,结果都是一个托管模块(managed module),托管代码时一个标准的32位/64位Microsoft Wind

Spark的应用程序执行模型

今天看了一篇名为Top 3 Troubleshooting Tips to Keep You Sparking的文章,讲述了一些编写Spark程序需要注意的地方,看完之后想要总结一下. Spark执行模型,总结为官方的架构图: 本文主要讨论Driver和Worker. 我们知道,对于Spark开发的分布式应用程序,和写普通的scala程序基本类似.所以这时往往会陷入一些误区: 在Spark开发的应用程序的对象里,我给他们分成2类对象: 1.闭包内的对象:即在类似map, filter, redu