一、各个语言的长处

①非托管C/C++可对系统进行低级控制。可完全按照自己的想法管理内存,必要时方便地创建线程
②使用Microsoft Visual Basic 6.0可以快速生成UI应用程序,并可以方便的控制COM对象和数据库
③公共语言运行时(CLR)是一个可以由多种编程语言使用的“运行时”。CLR的核心功能(内存管理、程序集加载、安全性、异常处理、线程同步)可由面向CLR的所有语言使用

二、什么是托管模块

托管模块是标准的32位Microsoft Windows可移植执行体(PE32)文件,或者是标准的64位Windows可移植执行体(PE32+)文件,它们都需要CLR才能执行
【PE:可移植执行体】

三、托管模块的各个组成部分

组成部分

说明

PE32或PE32+

①标准Windows PE文件头。这个头使用PE32或PE32+格式

②标识文件类型(GUI,CUI或者DLL),并包含文件的生成时间

对于只包含IL代码的模块,PE32(+)头的大多数信息会被忽视。如果包含(native)CPU代码的模块,这个头包含与本机CPU代码有关的信息

CLR

包含使这个模块成为托管的信息(可由CLR和一些实用程序进行解释)

①CLR版本(major(主)minor(次)版本号)

②一些标志(flag)

③托管模块入口方法(Main方法)的MethodDef元数据token

④元数据

⑤资源

⑥强名称

⑦一些标志及其他不太重要的数据项的位置/大小

元数据

每个托管模块都包含元数据表(两种表)

①描述源代码中定义的类型和成员

②描述代码引用的类型和成员

IL(中间语言)代码

编译器编译源代码时生成的代码。在运行时,CLR将IL编译成本机CPU指令

四、安全性

托管语言总是利用Windows的数据执行保护(Data Execution Prevention DEP)和地址空间布局随机化(Address Space Layout Randomization ASLR)来增强整个系统的安全性

五、什么是IL代码

IL代码有时称为托管代码,因为CLR管理它的执行

六、元数据

1,什么是元数据
①元数据是一些老技术的超集。这些老技术包括COM的“类型库”(Type Library)和“接口定义语言”(Interface Definition Language,IDL)文件
②元数据和类型库和IDL不同,元数据总是与包含IL代码的文件关联(元数据总是嵌入和代码相同的EXE/DLL文件中,并嵌入最终生成的托管模块,所以元数据和它描述的IL代码永远不会失去同步)

2,元数据的用途
①元数据避免了在编译时对原生C/C++头和库文件的需求,编译器直接从托管模块中读取元数据
②Microsoft Visual stidio“智能感知”技术会解析元数据,告诉你一个类型提供了那些方法、属性、事件和字段。对于方法,还能告诉你需要的参数
③CLR的代码验证过程使用元数据确保代码只执行“类型安全”的操作
④元数据允许将对象的字段序列化到内存块,将其发送到另一台机器,然后反序列化,在远程机器上重建对象状态
⑤元数据允许垃圾回收器跟踪对象的生存期。垃圾回收期能判断任何对象的类型,并从元数据知道那个对象中的哪些字段引用了其他对象

七、C++编译器

Microsoft C++编译器的灵活性是其他编译器无法比拟的,因为它允许开发人员在托管代码中使用原生的C/C++代码

八、什么是程序集

①一个或多个模块/资源文件的逻辑分组
②重用、安全性、版本控制的最小单元
③相当于组件
④将托管模块合并成程序集

九、MSCorEE.dll

当运行应用程序时,windows检查exe文件头,决定创建32位或者64位进程之后,会在进程地址空间加载MSCorEE.dll的x86,x64或ARM版本,然后进程的主线程调用MSCorEE.dll中定义的一个方法。这个方法初始化CLR,加载EXE程序集,在调用其入口方法(Main)。随即,托管应用程序启动并运行

CLR基础的更多相关文章

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

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

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

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

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

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

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

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

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

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

  6. CLR基础与术语

    CLR(Common Language Runtime):一个可由多种编程语言使用的"运行时". CLR的核心功能(内存管理,程序集加载,安全性,异常处理,线程同步等)可由面向CL ...

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

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

  8. 重温CLR(一)CLR基础

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

  9. CLR - 基础

    前言 好记性不如烂“笔头”系列... 目录 托管模块 JIT(just-in-time) 元数据 CLR 解析类型引用 托管模块 面向 CLR 的编译器在编译源文件时最终会编译成一个 PE(可移植执行 ...

随机推荐

  1. Session详解、ASP.NET核心知识(8)

    介绍一下Session 1.作用 Cookie是存在客户端,Session是存在服务器端,目的是一样的:保存和当前客户端相关的数据(当前网站的任何一个页面都能取到Session). 在本篇博文的姊妹篇 ...

  2. Java 对象初始化生命周期

    class Man { String name; int age = 20; public static int sex = 1; Man(String name, int age) { //supe ...

  3. python 爬虫 ~ 查看收发包的情况

    DebugLog 可以用来查看收发包的情况,比较有意思,现特意记录下来: Sample: import urllib2 httpHandler = urllib2.HTTPHandler(debugl ...

  4. Python文件操作-文件的增删改查

    需求:对文件进行增删改查 由于时间原因,本次代码没有增加任何注释,如有疑问,请联系编辑者:闫龙 其实我也是醉了,看着这些个代码,我脑袋也特么大了,没办法,大神说了,不让用新知识,只可以使用学过的,所以 ...

  5. html5 构造网页的新方式

    从 html 诞生至今,我们构建 html 页面的使用 html 元素好像并没有太多的进步.在构建 html 页面中,用的最多的是 div 标签.但是应用 div 标签构建 html 页面有一个问题, ...

  6. go 函数介绍

    1. 定义:有输入.有输出,用来执行一个指定任务的代码块 func functionname([parametername type]) [returntype] { //function body ...

  7. Android Bander设计与实现 - 设计

    Binder Android IPC Linux 内核 驱动 摘要 Binder是Android系统进程间通信(IPC)方式之一.Linux已经拥有管道,system V IPC,socket等IPC ...

  8. 【bzoj3065】: 带插入区间K小值 详解——替罪羊套函数式线段树

    不得不说,做过最爽的树套树———— 由于有了区间操作,我们很容易把区间看成一棵平衡树,对他进行插入,那么外面一层就是平衡树了,这就与我们之前所见到的不同了.我们之前所见到的大多数是线段树套平衡树而此题 ...

  9. 无需编译app切换线上、测试环境

    在咱们测试过程中,经常需要切换测试环境和线上环境.大致有如下几个方案. 一.服务器地址编译到app中 此种方式需要在代码里保存两套配置,一套指向线上,一套指向测试.通过编译参数分别生成测试包.线上包. ...

  10. 关于主键的设计、primary key

    主键:用于唯一标识一个表中一行数据. 外键:用于建立两个表之间的关系,A表中有一列是B表中的主键,那么A表中这列的数据就受到B表主键的约束. 那么关于主键应该如何设计呢,这里我说下优缺点: 1.用自动 ...