[Clr via C#读书笔记]Cp1CLR执行模型
Cp1CLR执行模型
本章的概念点
CLR=Common Language Runtime
内存管理,程序集加载,安全性,异常处理和线程同步、CLR是基础,支持着面向它的各种语言。各种语言会被对应的编译器转换为托管模块。
不同语言有各自的优点和不足。
在需要托管程序运行的电脑上必须安装CLR(.NET Framework).
托管模块managed module
- PE32,PE32+=portable Executable
- CLR头(CLR版本,标志,IL入口的标记,元数据,资源,强名称,其他)
- 元数据,定义和引用的类型和成员
- IL中间代码
程序集Assembly
抽象概念,逻辑概念,重用,安全性,版本控制的最小单元,可以是一个文件,也可以是多个文件。组件。
可能是exe,也可能是dll
C#默认编译选项就是anycpu。
WoW64允许64位系统运行32位程序。
清单manifest
描述构成程序集的文件。自描述self-describing,方便部署,XCopy的方式。
元数据metadata=数据表
元数据的作用
- 无需头文件和库文件
- 支持Intellisence
- 确保类型安全
- 序列化支持
- 垃圾回收
中间语言IL=Intermedite Language
可以将IL视为一种OO的机器语言。
ILAsm.exe汇编器和ILDasm.exe反汇编器
IL基于栈。
IL是无类型的。
对底层CPU的抽象。
提供应用程序的健壮性和安全性。
每个Windows进程放在一个独立的虚拟内存空间。
即时编译JIT=just in time
JIT即时编译,首次编译有性能损失,第二次后会存入动态内存中,之后就快了。
JIT会对IL本地化的时候进行优化,编译器的debug和optimize选项会影响优化。未优化的代码提供调试暂停功能,优化的代码有助于提高速度和减少体积。
PDB=program database
PDB帮助调试器查找局部变量并将IL指令映射到源代码。
被JIT优化的托管代码性能可能比非托管更好。
NGen.exe可以实现将IL编译成本地代码。
unsafe代码
IL代码的知识产权
IL代码容易被反编译,但是现在很多情况是程序集是放在服务器上的,而分发出去的程序集可以使用混淆器,或者机密的部分使用非托管代码。
AppDomain
后续了解
FCL=Framework类库
.NET Framework的重要组成部分,微软已经造好的轮子,可以直接拿来用。
为了使用一个功能,必须知道这个功能由什么类型提供,在哪个命名空间当中。
CTS=Common Type System通用类型系统
字段,方法,属性,事件。
访问规则,public,private,protected,internal.
语言会公开自己的语言语法和类型规则,在编译的时候,将特有的语法映射到IL。
System.Object是万物之源。
CLS=Common Language Specification公共语言规范
可以理解为各个语言的规范接口,凡是遵守这个规范的,可以进行通信。
和非托管代码的互操作
托管代码可以使用P/Invoke来调用dll中的非托管函数。
托管代码可以使用现有的COM组件。
非托管代码可以使用托管代码。
最新文章
- JavaScript 全局属性/函数
- apply()和call()和bind()
- OUYA游戏开发核心技术剖析OUYA游戏入门示例——StarterKit
- BZOJ1077 : [SCOI2008]天平
- 四 mybatis开发dao的方法
- Ckeditor 中一些核心的对象的作用
- JavaScript专业规则12条
- Sql Server trace flags
- Java---25---集合框架共性方法
- 《JS权威指南学习总结--9.3 JS中JAVA式的类继承》
- 11 个简单的 Java 性能调优技巧
- Python2.x的UnicodeEncodeError: ‘ascii’ codec can’t encode异常错误
- 学号 20175212 《Java程序设计》第九周学习总结
- 在做销售录入界面时,如何使用dbgrid?(50分)
- 【vim】查找重复的连续的单词
- vue+axios实现移动端图片上传
- java.lang.NoClassDefFoundError: org/apache/curator/RetryPolicy解决方法
- Java基础-SSM之mybatis的树形控件(自关联)
- Swift 类
- Unix Programming :文件IO