CLR基础与术语

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

CLR的核心功能(内存管理,程序集加载,安全性,异常处理,线程同步等)可由面向CLR的所有语言使用。

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

面向CLR的语言编写的源代码文件通过编译器编译后就是托管模块。

托管模块的组成部分:

1.PE32或PE32+头:标准的Windows P文件头,PE32能在x86,x64上运行,PE32+只能在X64上。标识了文件类型,包括GUI,CUI或者DLL,并包含一个时间标记来指出文件的生成时间。

2.CLR头:包含使这个模块成为托管模块的信息(CLR来解释)。包含要求的CLR版本,一些flag,托管模块入口方法(Main)的MethodDef元数据token以及模块的元数据,资源,强名称,一些标志及其他不太重要的数据项的位置/大小。

3.元数据:每个托管模块都包含元数据表。主要有两种表:一种表描述源代码中定义的类型和成员,另一种描述源代码引用的类型和成员。Def & Ref.

4.IL(中间语言)代码:编译器编译源代码生成的代码。在运行时,CLR将IL编译成本机CPU指令。(目前实用的编译器是roslyn,也有编译器直接将源代码编译器编译成本地代码)。

托管代码(managed code):IL代码的一个其他的叫法。

程序集(Assembly):抽象概念, 一个或多个模块/资源文件的逻辑性分组。在CLR世界中,程序集相当于“组件”。

清单(Manifest):包含在PE32(+)头的数据块,元数据表的集合。描述了构成程序集的文件,程序集中的文件所实现的公开导出的类型(PUBLIC)以及与程序集关联的资源和数据文件。

编译器默认将生成的托管模块转换成程序集,相当于含有清单的托管模块。程序集把它的逻辑表示和物理表示区分开。

JIT(Just-in-time):CLR中的JIT编译器把IL代码装成本机(NATIVE)CPU指令,默认JIT会对不同的CPU架构进行特定的优化。

时间: 2024-10-13 00:56:22

CLR基础与术语的相关文章

Windbg CLR基础小测 《第六篇》

首先写一段代码如下: namespace ConsoleApplication3 { class Program { static void Main(string[] args) { Console.WriteLine("Hello, Windbg!"); Console.ReadKey(); } } } 在Debug目录中启动该程序,然后在Debug中附加该进程. 0:007> .load C:/WINDOWS/Microsoft.NET/Framework/v4.0.303

Web缓存基础:术语、HTTP报头和缓存策略

简介 对于您的站点的访问者来说,智能化的内容缓存是提高用户体验最有效的方式之一.缓存,或者对之前的请求的临时存储,是HTTP协议实现中最核心的内容分发策略之一.分发路径中的组件均可以缓存内容来加速后续的请求,这受控于对该内容所声明的缓存策略. 在这份指南中,我们将讨论一些Web内容缓存的基本概念.这主要包括如何选择缓存策略以保证互联网范围内的缓存能够正确的处理您的内容.我们将谈一谈缓存带来的好处.副作用以及不同的策略能带来的性能和灵活性的最大结合. 什么是缓存(caching)? 缓存(cach

CLR基础,CLR运行过程,使用dos命令创建、编译、运行C#文件,查看IL代码

CLR是Common Language Runtime的缩写,是.NET程序集或可执行程序运行的一个虚拟环境.CLR用于管理托管代码,但是它本身是由非托管代码编写的,并不是一个包含了托管代码的程序集,所以不能使用IL DASM进行查看,但CLR以dll的形式位于.NET版本号文件夹内. □ C#源代码从编译到CLR运行的全过程 →编写C#源代码,以class,struct,enum,interface,delegate...的形式 →编译器把源代码编译成.dll或.exe,其中包含了一些重要信息

C#基础及CLR基础学习笔记

一.CLR的FCL.CTS和CLS 1. CLR为Common Language Runtime,为微软.NET Framework的公共语言运行时. 2. CTS为Common Type System(通用类型系统),其是微软制定的一个正式的规范来描述类型的定义和行为,使得一种编程语言写的代码能和另一种编程语言进行沟通. CTS规定,一个类型可以包括0个或者多个成员. 字段(Field) 方法(Method) 属性(Property) 事件(Event) 同时,CTS指定类型可见性规则和类型成

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

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

《CLR.via.C#第三版》第一部分读书笔记(一)

最近开始仔细研读<CLR.via.C#第三版>这本书.读pdf文档确实很累.建议有条件的朋友还是买书看吧. 我的笔记用来记录我对这本书的理解,简化下逻辑,对每个部分我觉得是要点的进行归纳总结.特别基础的东西不会做过多的阐述. 第一部分讲的是CLR基础. 首先还是重新说下CLR的概念:“CLR 是一个可由多种编程语言使用的“运行时”.可用任何编程语言来开发代码,只要编译器是面向CLR的就可以了”.这里要重新解释下“只要编译器是面向CLR的就可以了”这句话.初学者一般不认同.net平台跨语言,或者

关于CLR、CIL、CTS、CLS、CLI、BCL和FCL

如果要想深入学习.NET平台,那么标题中的这些关键字对你来说并不陌生,这些名词构成了.NET庞大的生态系统,为了宏观认识.NET平台,学些.NET架构体系,针对一些常用常用名词的理解是很有必要的,未必强行记忆,但至少要知道它们的含义. CLR,公共语言运行时(Common Language Runtime) 无论通过任何语言构建产品,都必须寄宿到一个平台中运行,这正如我们的软件运行在操作系统环境一样,操作系统为CLR提供了运行环境,使用.NET构建的程序又运行在CLR之上,CRL为.NET程序的

CLR via C# 学习计划

本书是学习c#的人必读书,计划今年完成,读透. 书是在亚马逊买的,虽然有点小贵,但是为了情怀,咬咬牙买了. 需要学习的: CLR基础 (CH1-CH3) 设计类型 (CH4-CH13) 基本类型 (CH14-CH19) 核心工具 (CH20-C25) 多线程 (CH26-CH30) (2015年已经完成) 细说.NET 中的多线程 (一 概念) 细说.NET中的多线程 (二 线程池) 细说.NET中的多线程 (三 使用Task) 细说.NET中的多线程 (四 使用锁进行同步) 细说.NET中的多

[未读]CLR via C#(第4版)

内容简介 <CLR via C#(第4版)>针对CLR和.NET Framework 4.5进行深入.全面的探讨,并结合实例介绍了如何利用它们进行设计.开发和调试.全书5部分共29章.第Ⅰ部分介绍CLR基础,第Ⅱ部分解释如何设计类型,第Ⅲ部分介绍基本类型,第Ⅳ部分以核心机制为主题,第Ⅴ部分重点介绍线程处理. 通过本书的阅读,读者可以掌握CLR和.NET Framework的精髓,轻松.高效地创建高性能应用程序. 2014 Tsinghua University Press Limited Au