不能使用clr编译c文件 怎么强制用clr_CLR细节整理

本文详细介绍了.NET CLR(Common Language Runtime)的工作原理,包括C#编译过程、IL(Intermediate Language)、托管模块、元数据以及PDB调试信息。此外,还探讨了类型系统、内存管理、垃圾回收、程序集加载、线程基础等内容,帮助开发者深入理解.NET框架的核心机制。
摘要由CSDN通过智能技术生成

91228873b04b99ad06a00159799de813.png

+C# .Net CLR IL

C#是编程语言,有自己的语法规则、编译器。

.Net 是一个平台,可以开发、部署、执行分布式的引用程序

CLR将IL语言在运行时翻译为CPU指令

IL是Microsoft中间语言,可以由多种语言生成,达到跨语言的效果。

+CLR

CommonLanguageRuntime:是一个可由多种编程语言使用的“运行时”。我们将编写好的C#或者其他语言的脚本,使用编译器编译为CLR使用的托管模块(下面解释),然后执行里面的代码时,CLR将上面的中间语言编译成本机的CPU指令(运行时编译),稍后会缓存第一次编译的CPU指令,之后直接调用。

+托管模块

1、PE头(PE:PortableExecutable可移植执行体):标记32位还是64位使用,文件类型时GUI还是DLL,文件生成时间,CPU代码相关信息。构成程序集的文件、plublic类型、程序集关联的资源和文件

2、CLR头:版本,一些标志,入口Main方法

3、元数据:两个(种)表,源代码定义的类型和成员;源代码引用的类型和成员

4、IL中间语言代码:编译源代码生成的代码,运行时CLR将IL编译成本机CPU指令

注意元数据表与IL应是关联的,编译器同时生成元数据表和IL,然后同时嵌入托管模块,因此始终时关联的

编译器默认将生成的托管模块转换成程序集

+元数据作用明显

1、使用vs写代码时,解析元数据可以告诉一个类型的方法、属性、事件、字段、参数。

2、不同机器上字段序列化,然后反序列化。

3、元数据知道哪个对象引用了哪些对象,方便垃圾回收器工作。

+PDB调试

编译源文件时可以选择打开 /debug(+/full/pdbonly) 开关,生成 ProgramDatabase文件。PDB文件帮助调试器查找局部变量并将IL指令映射到源代码。

+运行时编译CPU指令好处

1、JIT编译器能判断应用程序是不是可以生成使用Pentium4支持的特殊指令。

2、生成的代码对主机进行优化

+核心功能

内存管理,程序集加载、安全性、异常处理、线程同步

+通用类型系统CommonTypeSystem(CTS)

CLR围绕类型展开,类型向应用程序和其他类型公开功能。通过类型,用一种编程语言写的代码能与另一种语言写的代码沟通。所以有一个正式的规范来面熟类型的定义和行为。

一个类型可以包含一个或多个成员:

1、字段Field:数据变量,根据名称和类型区分

2、方法Method:函数,有一个名称、一个签名(指定参数数量、类型,方法是否有返回值、返回值类型)、一个或多个修饰符。

3、属性Property:getter、setter

4、事件Event

CTS还规定了访问权限

CTS规定所有类型必须从预定义的System.Object类型继承。可以实现:1、比较相等性;2、获取实例的哈希码;3、查询实例的真正类型;4、执行浅拷贝;5、tostring

生成、打包、部署和管理应用程序及类型

+编译一个应用程序

1、将代码放到一个源码文件中,C#是.cs文件

2、csc.exe /out:Program.exe /t:exe /r:MsCorLib.dll Program.cs。首先指出编译Program.cs文件,/r是reference,告诉编译器再MSCorLib.dll查找需要用的外部类型。/t是type,windows支持三种应用程序:1、控制台用户界面应用程序exe;2、图形用户界面winexe;3、WindowsStore应用appcontainerexe。

+元数据中的元数据定义表

1、ModuleDef:模块包含的文件名和扩展名及唯一ID

2、TypeDef:类型名称、基类型、一些标志(public、abstract等)、一些索引(拥有的method、field、property、event)

3、MethodDef:方法名称、一些标志、签名、该方法在IL代码中的偏移量、参数信息

4、FieldDef:标志、类型、名称

5、ParamDefÿ

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值