clr的执行模型-笔记

学习来源:《CLR via C by Jeffrey Richter 》第四版,第1章  clr的执行模型

1.C#编译生成执行程序集文件

clr的执行模型-笔记_第1张图片

编译文件的组成:pe32/pe32+头,clr头,元数据,IL

pe32/pe32+头:windows标准执行文件头

clr头:clr版本,标志,入口方法,元数据,资源,强名称

clr的执行模型-笔记_第2张图片

编译后由CLR执行

clr的执行模型-笔记_第3张图片

2.CLR执行程序集

CLR的JIT编译器将方法的IL转换成本机cpu指令,

第一次调用时由jtt编译器转换成cpu指令,存储到内存中,第二次调用不用再编译,直接从内存获取

clr的执行模型-笔记_第4张图片

clr的执行模型-笔记_第5张图片

不安全代码:

jtt编译unsafe代码时,会检测程序集是否授予了System.Security.Permissions.SecurityPermission权限,

而且是否设置System.Security.Permissions.SecurityPermissionFlag的值是SkipVerification。

如果有该标志,JIT编译器不会编译不安全代码,并允许代码执行。clr信任这些代码,并希望对地址及字节的直接操作不会造成损害。

如果未设置该标志,则直接抛出异常,禁止方法执行。

3.本机代码生成器:NGen.exe

NGen.exe将IL代码编译成本机代码文件(编译好的机器码/汇编码)。由于代码已编译好,就不需要JIT再次编译IL代码了。

你可能感兴趣的:(c#)