学多些懂多些

 

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

 

 

 

  .NET Framework 在某种程度上,它是它自己的操作系统:有自己的内存管理器、安全系统、文件加载器、错误处理机制、应用程序隔离边界(AppDomains)、线程处理模型等。

 

 

  公共语言运行时 (Common Language Rumtime,CLR)的核心功能(比如内存管理、程序集加载、安全性、异常处理和线程同步)可由面向CLR的所有语言使用。例如,CLR允许创建线程,所以面向CLR的任何语言都能创建线程。可用任何编程语言进行开发,只要编译器是面向CLR的就可以了,例如Microsoft创建的几个语言编译器:C++/CLIC#Visual BasicF#Iron PythonIron Ruby以及一个"中间语言"(Intermediate Language,IL)汇编器。

 编译源代码的过程如下:

 

 

CLR VIA C# 笔记一(1.1)

 

  托管模块 是以一个标准的32 Windows可移植执行体(PE32)或者64位的Windows可移植执行体(PE32+)文件,它们都需要CLR才能执行.托管的程序集总是利用Windows的数据执行保护(Data Execution Prevention ,DEP)和地址空间布局随机化(Address Space Layout Randomization,ASLR)来增强整个系统的安全性.

 

  托管模块的各个部分:

   1.        PE32PE32+ 分辨是在32位还是64位系统上运行,标识文件类型包括GUICUI或者DLL

   2.        CLR头: CLR版本,托管模块入口方法的MethodDef元数据token,资源,强名称,一些flag

   3.        元数据主要的两种类型的表:分别是描述源代码中定义、引用的类型和成员。

   4.        IL(中间语言)代码:编译器编译源代码时生成的代码,CLRIL编译成本地CPU指令。

 

  元数据 是一组数据表:

    1.        描述了模块中定义的内容,比如类型及其成员

    2.        描述了托管模块引用的内容,比如导入的类型及其成员

    3.        清单manifest,描述了构成Assembly的文件,由Assembly中的文件实现的公共导出类型,与Assembly相关联的资源/数据文件

   元数据总是与包含IL代码的文件关联同步的,总是嵌入和代码相同的EXE/DLL文件中

 

  元数据的用途:

   1.        编译时,消除了对本地头和库文件的需求,编译器可直接从托管模块读取元数据

   2.        Visual Studio使用元数据,它的智能感知技术解析元数据

   3.        CLR的代码验证使用元数据确保代码只执行类型安全的操作

   4.        允许将对象的字段序列化到内存块,发送到别的极其,通过反序列化,重建对象的状态

   5.        垃圾收集器跟踪对象的生存期及那些字段引用了其他对象

 

  MicrosoftC#,Visual Basic,F#IL汇编器生成包含托管代码(IL)和托管数据的模块,这些模块需要用户安装CLR(.NET Framework的一部分提供).C++编译器默认生成包含非托管(本地)代码的EXE/DLL模块,并在运行时操纵非托管数据(本地内存),这些模块不需要CLR就可执行.C++也可以通过/CLR命令行开关,生成托管代码模块.

 

 


 

相关文章: