一、各个语言的长处

①非托管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. 【BZOJ】2208 [Jsoi2010]连通数

    [题意]给定n个点的有向图,求可达点对数(互相可达算两对,含自身).n<=2000. [算法]强连通分量(tarjan)+拓扑排序+状态压缩(bitset) [题解]这题可以说非常经典了. 1. ...

  2. 正则表达式 grep文本查询 sed流处理 应用

    一.正则表达: ^:以什么什么开头,^a:以a字符开头 $:以什么什么结尾,b$:以b字符结尾 *:左边字符0-无穷个 +:左边字符1-无穷个 .:代表单字符 ?:前导字符为零个或1个 {n}:左面字 ...

  3. HDU 1715 大斐波数 加法高精度

    解题报告:求 斐波那契数,不过这题的n的范围是1000,肯定是早就超过了的,所以要用到高精度,所以这题其实就是一个加法高精度的题. 我的做法 是写一个大数相加的函数,然后打表就是了,这里注意的就是每次 ...

  4. Linux基础-awk使用

    打印uid在30~40范围内的用户名:awk -F: '$3>=30&&$3<040{print $1}' passwd 打印第5-10行的行号和用户名:awk -F: ' ...

  5. 浅析Postgres中的并发控制(Concurrency Control)与事务特性(上)

    转载:https://www.cnblogs.com/flying-tiger/p/9567213.html#4121483#undefined PostgreSQL为开发者提供了一组丰富的工具来管理 ...

  6. 编译安装 zbar 时两次 make 带来的惊喜

    为了装 php 的条形码扩展模块 php-zbarcode,先装了一天的 ImageMagick 和 zbar.也许和我装的 Ubuntu 17.10 的有版本兼容问题吧,总之什么毛病都有,apt 不 ...

  7. Linux内核跟踪之trace框架分析【转】

    转自:http://blog.chinaunix.net/uid-20543183-id-1930846.html   ---------------------------------------- ...

  8. python网络编程--进程线程

    一:什么是进程 一个程序执行时的实例被称为一个进程. 每个进程都提供执行程序所需的资源.一个进程有一个虚拟地址空间.可执行代码.对系统对象的开放句柄.一个安全上下文.一个独特的进程标识符.环境变量.一 ...

  9. jQuery中绑定事件的几种方法

    以click事件为例,jQuery中绑定事件有三种方法: (1)target.click(function(){});  (2)target.bind("click",functi ...

  10. redis持久化的两种方式

    redis是一个内存型数据库.当redis服务器重启时,数据会丢失.我们可以将redis内存中的数据持久化保存到硬盘的文件中. redis持久化有两种机制.RDB与AOF.默认方式是RDB. 1.RD ...