专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > CLR

CLR执行形式之托管代码程序集浅析

发布时间:2011-06-23 13:51:18 文章来源:www.iduyao.cn 采编人员:星星草
CLR执行模式之托管代码程序集浅析

       CLR即公共语言运行时,是一个可由多种编程语言使用的‘运行时’,其核心功能(内存管理,程序集加载,安全性,异常处理和线程同步等)均可由面向CLR的所有语言使用。运行时不必关心开发人员用哪一种语言写源代码,只要编译器是面向CLR的。

       通过语言对应的编译器检查语法和分析源码编译生成某些托管模块(PE32或PE32+)通过数据执行保护(DEP)和地址空间布局随机化(ASLR)增强整个系统的安全性。接下来详说其主要组成部分:

  • PE32或PE32+:标准Windows PE文件头(一种格式),使用PE32格式文件能在Win32位或64位版本上运行,使用PE32+只能在64位上运行。其标识了文件类型对于只包含IL代码的模块PE32(+)头的大多数信息会被忽视,如果包含本机CPU代码的模块,这个头包含与本机CPU代码有关的信息。
  • CLR头:包含是这个模块成为托管模块的信息(要求的CLR版本,一些标志,托管模块入口方法的元数据以及模块的元数据,资源强名称,一些标志及其他不太重要的数据项的位置)
  • 元数据:每个托管模块都包含元数据表。主要有两种,一种描述源代码中定义的类型和成员,另一种描述源代码引用的类型和成员。
  • IL(中间语言)代码:编译器编译源代码时生成的代码,在运行时将IL编译成本机CPU指令。

简单来说一种格式标准让其成为一种模块,模块中元数据其实就是数据表的集合,用以关联IL代码文件可以说是同步的。

      元数据的加入有许多用途:

  • 编译器直接从托管模块读取元数据,避免对原生C/C++头和库文件的需求。
  • 帮助你写代码(智能感知技术)
  • CLR代码验证过程使用元数据确保代码只执行“类型安全”的操作。
  • 允许将对象的字段序列化到内存块,将其发送给另一台机器,然后反序列化在远程机器上重建对象状态
  • 垃圾回收器的实现  

CLR其实不和模块工作,通常将一个或多个模块/资源文件逻辑性分组成程序集(抽象概念,是重用,安全性以及版本控制的最小单元,相当于组件)。编译器默认将生成的托管模块转换成程序集,C#编译器生成的是含有清单的托管模块,清单指出程序集只由一个文件构成。所以对于只有一个托管模块且无资源文件的项目,程序集就是托管模块。在程序集的模块中,包含于引用的程序集有关的信息,这些信息使程序集能够自描述(C#通过元数据来描述自身,当执行代码时,运行库将元数据加载到内存,并引用他来发现有关代码的类成员等信息)。程序集吧逻辑表示与物理表示区分开,便于部署文件节省空间缩短安装时间。

 

友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

  • [精粹]正则表达式30分钟入门教程(转)

    [精华]正则表达式30分钟入门教程(转) 前言   今天做东西的时候碰到个正则表达式的需求,以前做数据验证的时候因为都是一些通用的东...

  • WCF学习1

    WCF学习一 在阅读博客园 WCF开发实战系列一:创建第一个WCF服务 一文中,发现手动配置App.config还是有难度。这篇文章没讲很多...

  • .NET 类库研究必备参照 添加微软企业库源码

    .NET 类库研究必备参考 添加微软企业库源码 前不久,为大家提供了一个.NET 类库参考源码的网站,扣丁格鲁(谐音“coding guru...

  • .NET 类库研究必备参照 扣丁格鲁

    .NET 类库研究必备参考 扣丁格鲁 .NET 类库的强大让我们很轻松的解决常见问题,作为一个好专研的程序员,为了更上一层楼,研究CLR...

  • 垃圾回收机制GC知识再总结兼谈怎么用好GC

    垃圾回收机制GC知识再总结兼谈如何用好GC 一、为什么需要GC 应用程序对资源操作,通常简单分为以下几个步骤: 1、为对应的资源分配内...

  • .NET 4.5.1 参照源码索引

    .NET 4.5.1 参考源码索引...

  • 关于GC跟析构函数的一个趣题

    关于GC和析构函数的一个趣题 这个有趣的问题感谢装配脑袋友情提供。 请看如下代码: public class Dummy { publi...

  • 对程序集的几点懂得

    对程序集的几点理解   CLR对程序集的解释是:程序集是一个或多个类型定义文件及资源文件的集合。平时我们常见的后缀为dll或exe的...

  • 渣滓回收期算法简介

    垃圾回收期算法简介 垃圾回收器检查托管堆中是否有应用程序不再使用的对象,如果有,他们使用的内存就可以回收(如果一次垃圾回收之后...

  • CLR值类型跟引用类型

    CLR值类型和引用类型 知识点:引用类型、值类型、装箱、拆箱 CLR支持两种类型:引用类型和值类型。引用类型在堆上分配内存,值类型在线...