• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
Hing
沉浸在技术的海洋,通过学习与讨论,只有不断的提高,才有可能去创造与实现.
博客园    首页    新随笔    联系   管理    订阅  订阅
CLR VIA C# 笔记一(1.1)

学多些懂多些…

 

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

 

 

 

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

 

 

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

 编译源代码的过程如下:

 

 

 

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

 

  托管模块的各个部分:

   1.        PE32或PE32+ 头: 分辨是在32位还是64位系统上运行,标识文件类型包括GUI、CUI或者DLL

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

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

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

 

  元数据 是一组数据表:

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

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

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

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

 

  元数据的用途:

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

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

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

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

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

 

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

 

 


 

posted on 2011-06-09 19:36  Pacer  阅读(1207)  评论(1)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3