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架构进行特定的优化。
CLR基础与术语的更多相关文章
- 第一部分 CLR基础:第3章 共享程序集和强命名程序集
第一部分 CLR基础:第3章 共享程序集和强命名程序集
- Web缓存基础:术语、HTTP报头和缓存策略
简介 对于您的站点的访问者来说,智能化的内容缓存是提高用户体验最有效的方式之一.缓存,或者对之前的请求的临时存储,是HTTP协议实现中最核心的内容分发策略之一.分发路径中的组件均可以缓存内容来加速后续 ...
- Windbg CLR基础小测 《第六篇》
首先写一段代码如下: namespace ConsoleApplication3 { class Program { static void Main(string[] args) { Console ...
- 第一部分 CLR基础:第1章 CLR的执行模型
1.1将源代码编译成托管模块
- 01.由浅入深学习.NET CLR 基础系列之CLR 的执行模型
.Net 从代码生成到执行,这中间的一些列过程是一个有别于其他的新技术新概念,那么这是一个什么样的过程呢,有什么样的机制呢,清楚了这些基本的东西我们做.Net的东西方可心中有数.那么,CLR的执行模型 ...
- CLR基础之一---认识CLR [《CLR via C#》读书笔记]
<CLR via C#>读书笔记 什么是CLR CLR的基本概念 通用语言运行平台(Common Language Runtime,简称CLR)是微软为他们的.Net虚拟机所选用的名称.这 ...
- CLR基础
一.各个语言的长处 ①非托管C/C++可对系统进行低级控制.可完全按照自己的想法管理内存,必要时方便地创建线程②使用Microsoft Visual Basic 6.0可以快速生成UI应用程序,并可以 ...
- CLR基础,CLR运行过程,使用dos命令创建、编译、运行C#文件,查看IL代码
CLR是Common Language Runtime的缩写,是.NET程序集或可执行程序运行的一个虚拟环境.CLR用于管理托管代码,但是它本身是由非托管代码编写的,并不是一个包含了托管代码的程序集, ...
- 重温CLR(一)CLR基础
如果一个C#developer,对CLR没有了解,那就只能是入门级别.未来.NET CORE是趋势,但是.NET CORE 也是基于CoreCLR的,而CLR和CoreCLR其实差别不大,从runti ...
随机推荐
- jQuery修炼心得-DOM节点的插入
1. 内部插入append()与appendTo() append:这个操作与对指定的元素执行原生的appendChild方法,将它们添加到文档中的情况类似. appendTo:实际上,使用这个方法是 ...
- mysql分页查询优化
由于MySql的分页机制:并不是跳过 offset 行,而是取 offset + N 行,然后返回放弃前 offset 行,返回N 行, 所以当 offset 特别大的时候,效率就非常的低下,要么控制 ...
- MVC 5 + EF6 完整教程16 -- 控制器详解
Controller作为持久层和展现层的桥梁, 封装了应用程序的逻辑,是MVC中的核心组件之一. 本篇文章我们就来谈谈 Controller, 主要讨论两个方面: Controller运行机制简介 C ...
- 2017Unity开发者大会备受关注的原因有哪些?
Unite大会是由Unity举办的全球开发者大会,至今已有10年的历史.从最开始Unity开发者大会仅500人,到现在Unity大会已经增长到5000人,10倍的参与人数,Unity开发者大会仅仅用了 ...
- 产品经理学Python:for循环、while循环
Python中有两种循环,分别为:for循环和while循环. 1. for循环 for循环可以用来遍历某一对象(遍历:通俗点说,就是把这个循环中的第一个元素到最后一个元素依次访问一次).for循环的 ...
- CSS完美实现iframe高度自适应(支持跨域)
Iframe的强大功能偶就不多说了,它不但被开发人员经常运用,而且黑客们也常常使用它,总之用过的人知道它的强大之处,但是Iframe有个致命的"BUG"就是iframe的高度无法自 ...
- 使用命令行的方式操作hdfs
必须要用打全路径,没有相对路径的概念,或者cd的概念 打印报告: 所有的命令显示出来: 以下的操作分别是创建创建文件夹,删除文件夹,显示文件夹,可见删除文件夹只能够使用-rmr . 从本地拷贝文件到h ...
- zabbix监控docker
[toc] 1.下载模版 然后把模版放到/usr/local/lib/zabbix/agent下 github地址内含监控模版 2.修改 zabbix-agentd 配置文件 vim /usr/loc ...
- 如何在Eclipse下查看JDK源代码
设置: 1.点 "窗口"-> "首选项" -> "Java" -> "已安装的JRE" 2.此时&qu ...
- 远程登录aws
AWS的EC2服务器是用密钥来认证的,在创建instance时,会提示,创建一个key pair,同时会提示下载一个xxx.pem的密钥文件到本地硬盘.下面是通过SecureCRT连接到EC2的操作步 ...