源代码编译为托管模块后,托管模块都包含哪些东西?

 

我们使用任何支持CLR的编程语言创建源代码文件,经过编译器编译之后,生成的结果都是托管模块Manage Module)。

托管模块是需要CLR才能执行的标准windows可移植可执行(PE)文件

 

下面主要描述托管模块的各个组成部分:

部分

描述

PE表头

该表头指出了该文件的类型:GUICUIWeb ServiceExeDll等。

另外该表头还包括一个时间标记用于表示文件创建的时间。

CLR表头

包含标识托管模块的一些信息。这些信息包括托管模块所需要的CLR版本号、托管模块入口点方法(Main方法)的MethodDef元数据标识,以及有关托管模块的元数据、资源、强命名、标记等。

IL代码

编译器在编译源代码时产生的指令。

CLR在运行时会将IL代码编译成本地cpu指令。

元数据

元数据总是和IL代码在一起的。

元数据主要有两类:

一类是用于描述源代码中定义的类型和成员;

一类是用来描述源代码中引用的类型和成员。

 

元数据的作用:

  • 有了元数据后,写代码时就不需要像c语言一样自己去引入头文件和库文件等。因为在元数据中已经对引用到的类型和成员做了记录,编译器直接从元数据中就能够获得相关引用信息。
  • 有了元数据,代码编辑器就可以实现智能感知。
  • CLR的代码验证过程可以利用元数据来确保代码仅执行“安全”的操作。因为通过元数据就知道了某个操作需要多少的空间等信息。
  • 利用元数据,可以将一个对象的字段序列化到一个内存块中,然后远程的传送给另一台机器,最后再在远程机器上执行反序列化,从而重新创建对象和它的状态。
  • 利用元数据,垃圾收集器可以追踪对象的生命周期。对于任何对象,垃圾收集器都能够通过元数据来确定该对象的类型,并且可以获知该对象的哪些字段引用了其它对象。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值