CLR基础
一、各个语言的长处
①非托管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基础的更多相关文章
- 第一部分 CLR基础:第3章 共享程序集和强命名程序集
第一部分 CLR基础:第3章 共享程序集和强命名程序集
- 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基础与术语
CLR(Common Language Runtime):一个可由多种编程语言使用的"运行时". CLR的核心功能(内存管理,程序集加载,安全性,异常处理,线程同步等)可由面向CL ...
- CLR基础,CLR运行过程,使用dos命令创建、编译、运行C#文件,查看IL代码
CLR是Common Language Runtime的缩写,是.NET程序集或可执行程序运行的一个虚拟环境.CLR用于管理托管代码,但是它本身是由非托管代码编写的,并不是一个包含了托管代码的程序集, ...
- 重温CLR(一)CLR基础
如果一个C#developer,对CLR没有了解,那就只能是入门级别.未来.NET CORE是趋势,但是.NET CORE 也是基于CoreCLR的,而CLR和CoreCLR其实差别不大,从runti ...
- CLR - 基础
前言 好记性不如烂“笔头”系列... 目录 托管模块 JIT(just-in-time) 元数据 CLR 解析类型引用 托管模块 面向 CLR 的编译器在编译源文件时最终会编译成一个 PE(可移植执行 ...
随机推荐
- [大数据测试]ETL测试或数据仓库测试入门
转载自: http://blog.csdn.net/zhusongziye/article/details/78633934 概述 在我们学习ETL测试之前,先了解下business intellig ...
- 【专题】平衡树(Treap,fhq-treap)
[旋转] 平衡树中的旋转是指在不改变中序遍历的前提下改变树的形态的方式.(中序遍历=排名顺序) 右旋将当前点的左节点旋上来,左旋反之.(图侵删) void rturn(int &k){ int ...
- pta 一
7-1 打印沙漏 (20 分) 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个“*”,要求按下列格式打印 ***** *** * *** ***** 所谓“沙漏形状”,是指每行输出奇数 ...
- 微服务深入浅出(4)-- 负载均衡Ribbon
Spring Cloud中可以使用RestTemplate+Ribbon的解决方案来将负载均衡以代码的形式封装到客户端中. 通过查阅官方文档可以知道,只需要在程序的IoC容器中注入一个restTemp ...
- Multidimensional Queries(二进制枚举+线段树+Educational Codeforces Round 56 (Rated for Div. 2))
题目链接: https://codeforces.com/contest/1093/problem/G 题目: 题意: 在k维空间中有n个点,每次给你两种操作,一种是将某一个点的坐标改为另一个坐标,一 ...
- 《区块链100问》第73集:达世币Dash是什么?
达世币诞生于2014年1月18日,匿名程度较比特币更高. 达世币有三种转账方式,一是像比特币一样的普通转账:二是即时交易.不需要矿工打包确认,就可以确认交易,几乎可以实现秒到:三是匿名交易.从区块链上 ...
- 20165230 2017-2018-2 《Java程序设计》第7周学习总结
20165230 2017-2018-2 <Java程序设计>第7周学习总结 教材学习内容总结 第十一章 JDBC与MySQL数据库 本周了解了如何在Java程序中使用JDBC语提供的AP ...
- MVVM模式的 数据绑定
数据绑定要达到的效果 数据绑定要达到什么效果呢,就是在界面中绑定了数据源之后,数据在界面上的修改能反映到绑定源,同时绑定源的修改也能反映到界面上.从界面反映到绑定的数据源是很容易理解的,因为在绑定过程 ...
- 说一下怎么搭建外网来访问SVN服务器
一.搭建SVN服务器 1.所需软件 TortoiseSVN,下载地址http://tortoisesvn.net/downloads.html TortoiseSVN中文语言包,下载地址http:// ...
- java基础38 正则表达式
1.常用的正则表达式 预定义字符类:. 任何字符(与行结束符可能匹配也可能不匹配) \d 数字:[0-9] \D 非数字: [^0-9] \s 空白字符:[ \t\n\x0B\f\r] \S ...