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架构进行特定的优化。

CLR基础与术语的更多相关文章

  1. 第一部分 CLR基础:第3章 共享程序集和强命名程序集

    第一部分 CLR基础:第3章 共享程序集和强命名程序集

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

    简介 对于您的站点的访问者来说,智能化的内容缓存是提高用户体验最有效的方式之一.缓存,或者对之前的请求的临时存储,是HTTP协议实现中最核心的内容分发策略之一.分发路径中的组件均可以缓存内容来加速后续 ...

  3. Windbg CLR基础小测 《第六篇》

    首先写一段代码如下: namespace ConsoleApplication3 { class Program { static void Main(string[] args) { Console ...

  4. 第一部分 CLR基础:第1章 CLR的执行模型

    1.1将源代码编译成托管模块

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

    .Net 从代码生成到执行,这中间的一些列过程是一个有别于其他的新技术新概念,那么这是一个什么样的过程呢,有什么样的机制呢,清楚了这些基本的东西我们做.Net的东西方可心中有数.那么,CLR的执行模型 ...

  6. CLR基础之一---认识CLR [《CLR via C#》读书笔记]

    <CLR via C#>读书笔记 什么是CLR CLR的基本概念 通用语言运行平台(Common Language Runtime,简称CLR)是微软为他们的.Net虚拟机所选用的名称.这 ...

  7. CLR基础

    一.各个语言的长处 ①非托管C/C++可对系统进行低级控制.可完全按照自己的想法管理内存,必要时方便地创建线程②使用Microsoft Visual Basic 6.0可以快速生成UI应用程序,并可以 ...

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

    CLR是Common Language Runtime的缩写,是.NET程序集或可执行程序运行的一个虚拟环境.CLR用于管理托管代码,但是它本身是由非托管代码编写的,并不是一个包含了托管代码的程序集, ...

  9. 重温CLR(一)CLR基础

    如果一个C#developer,对CLR没有了解,那就只能是入门级别.未来.NET CORE是趋势,但是.NET CORE 也是基于CoreCLR的,而CLR和CoreCLR其实差别不大,从runti ...

随机推荐

  1. 如何修改dmesg log buffer size

    CONFIG_LOG_BUF_SHIFT: Kernel log buffer size (16 => 64KB, 17 => 128KB) General informations Th ...

  2. 基于swift MKMapkit 开发的地图定位导航

    //  DTOneViewController.swift //  Mapper-JSON // //  Created by kcl on 16/8/8. //  Copyright © 2016年 ...

  3. poj2349,最小生成树!

    The Department of National Defence (DND) wishes to connect several northern outposts by a wireless n ...

  4. cd命令使用详解

    cd命令是目录切换命令,是shell内置命令. 语法: cd [-L|-P] [dir] 选项: -p 如果要切换到的目标目录是一个符号连接,直接切换到符号连接指向的目标目录 -L 如果要切换的目标目 ...

  5. poj1847 Tram 最短路Dijkstra

    题目链接:http://poj.org/problem?id=1847 Dijkstra算法的模版应用 题意:给你N个点和起点终点,点与点有铁路,接下来的N行分别为点i的情况 第一个数字表示与该点连通 ...

  6. [ERR] Node 172.168.63.202:7001 is not empty. Either the nodealready knows other nodes (check with CLUSTER NODES) or contains some

    关于启动redis集群时: [ERR] Node 172.168.63.202:7001 is not empty. Either the nodealready knows other nodes ...

  7. 简单的记录,VMware Tools的安装

    VMware Tools是VMware虚拟机中自带的一种增强工具,只有在VMware虚拟机中安装好了VMware Tools,才能实现主机与虚拟机之间的文件共享,同时可支持自由“拖拽”的功能来对传文件 ...

  8. OpenCV探索之路(六):边缘检测(canny、sobel、laplacian)

    边缘检测的一般步骤: 滤波--消除噪声 增强--使边界轮廓更加明显 检测--选出边缘点 Canny算法 Canny边缘检测算法被很多人推崇为当今最优秀的边缘检测算法,所以我们第一个就介绍他. open ...

  9. CentOS7 防火墙规则 (firewalld)

    1.firewalld的基本使用 启动: systemctl start firewalld 查看状态: systemctl status firewalld  停止: systemctl disab ...

  10. rPithon vs. rPython(转)

    Similar to rPython, the rPithon package (http://rpithon.r-forge.r-project.org) allows users to execu ...