【.NET 学习笔记】Chapter.01 CLR的执行模型

1.1 将源代码编译成托管模块
(1).使用支持CLR的任何语言编写源代码,然后通过使用对应的编译器来检查语法和分析源代码,无论使用哪种编译器,结果都是一个托管模块(Managed Module)。
托管模块是一个标准的32位Microsoft Windows可移植执行体文件(PE32文件)或64位文件(PE32+),他们需要CLR才能运行。 

(2).本地代码编译器生成的是特定CPU架构的专用代码(X86, AMD64, IA64),而CLR相兼容的编译器生成的都是中间代码(Intermediate Language,IL).

(3).编译器同时生成元数据(MetaData)和代码,并将它们绑定到最终生成的托管模块中,所以元数据和代码永远是同步的。

(4).托管模块的组成部分:PE32(+) Header, CLR Header, Metadata, IL code.

(5).元数据的用途
- 在编译时,元数据消除了对头文件和库文件的需求
- 智能感知,能够指出一个类型提供了什么方法、属性、事件、字段,如果是方法还指出需要什么参数
- 元数据允许将一个对象的字段序列化到一个内存块中,将其发送到另外一台计算机中,然后进行反序列化,在远程计算机上重建对象状态;
-

1.2 将托管模块合成程序集
(1). CLR实际上不是和模块一起工作的,而是和Assembly一起工作的。

1.3 加载公共语言运行库
(1). 运行一个可执行文件时,会检查这个EXE文件的头,判断应用程序所需要的是32位地址空间,还是64位地址空间。具有PE32头的文件可以在32位或者64位地址空间中运行,具有PE32+头的文件则要求一个64位地址空间;Windows还要检查头文件中嵌入的CPU信息,确保它与CPU类型相匹配;最后,Windows的64版本中采用了一项WoW64的技术(Windows on Windows64),允许运行32位的Windows应用程序。

(2).在Windows检查EXE文件头,判断是创建32位进程,64位进程,还是WoW64进程之后,Windows在进程的地址空间中加载MSCorEE.dll的X86, X64或者IA64版本。
-如果是Windows的X86版本,MSCorEE.dll的X86版本位于C:/Windows/System32/目录中,
-如果是Windows的X64或者IA64版本,
 MSCorEE.dll的X86版本位于C:/Windows/SysWow64/目录中,
 MSCorEE.dll的X64版本位于C:/Windows/System32/目录中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值