[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组件。
非托管代码可以使用托管代码。
[Clr via C#读书笔记]Cp1CLR执行模型的更多相关文章
- 《深入了解java虚拟机》高效并发读书笔记——Java内存模型,线程,线程安全 与锁优化
<深入了解java虚拟机>高效并发读书笔记--Java内存模型,线程,线程安全 与锁优化 本文主要参考<深入了解java虚拟机>高效并发章节 关于锁升级,偏向锁,轻量级锁参考& ...
- CLR via C# 读书笔记-27.计算限制的异步操作(上篇)
前言 学习这件事情是一个习惯,不能停...另外这篇已经看过两个月过去,但觉得有些事情不总结跟没做没啥区别,遂记下此文 1.CLR线程池基础 2.ThreadPool的简单使用练习 3.执行上下文 4. ...
- CLR via C# 读书笔记-21.托管堆和垃圾回收
前言 近段时间工作需要用到了这块知识,遂加急补了一下基础,CLR中这一章节反复看了好多遍,得知一二,便记录下来,给自己做一个学习记录,也希望不对地方能够得到补充指点. 1,.托管代码和非托管代码的区别 ...
- CLR via C#读书笔记一:CLR的执行模型
CLR(Common Language Runtime)公共语言进行时是一个可由多种编程语言使用的“进行时”. 将源代码编译成托管模块 可用支持CLR的任何语言创建源代码文件,然后用对应的编译器检查语 ...
- Clr Via C#读书笔记---I/O限制的异步操作
widows如何执行I/O操作 构造调用一个FileStream对象打开一个磁盘文件-----FileStream.Read方法从文件中读取数据(此时线程从托管代码转为本地/用户模式代码)- ...
- Clr Via C#读书笔记---计算限制的异步操作
线程池基础 1,线程的创建和销毁是一个昂贵的操作,线程调度以及上下文切换耗费时间和内存资源. 2,线程池是一个线程集合,供应你的用程序使用. 3,每个CLR有一个自己的线程池,线程池由CLR控制的所有 ...
- CLR via C# 读书笔记---常量、字段、方法和参数
常量 常量是值从不变化的符号.定义常量符号时,它的值必须能在编译时确定.确定后,编译器将唱两只保存在程序集元数据中.使用const关键字声明常量.由于常量值从不变化,所以常量总是被视为类型定义的一部分 ...
- Clr Via C#读书笔记---程序集的加载和反射
#1 加载程序集 Assembly.Load: public class Assembly { public static Assembly Load(AssemblyName assemblyRef ...
- Clr Via C#读书笔记---垃圾回收机制
#1 垃圾回收平台的基本工作原理: 访问一个资源所需的具体步骤: 1)调用IL指令newobj,为代表资源的类型分配内存.在C#中使用new操作符,编译器就会自动生成该指令.2)初始化内存,设置资源的 ...
随机推荐
- Unity 游戏框架搭建 (十六) v0.0.1 架构调整
背景: 前段时间用Xamarin.OSX开发一些工具,遇到了两个问题. QFramework的大部分的类耦合了Unity的API,这样导致不能在其他CLR平台使用QFramework. QFramew ...
- Oracle 备份恢复实例
Oracle 备份恢复实例:三思笔记 1 shutdown abort 系统归档模式,有备份 create table xx as select * from emp; update xx set e ...
- input和div模仿select,带输入提示
有时候我们需要select和input的结合体,即可以使用下拉框,同时也可以用来输入,输入的同时显示可选的下拉选项 先上html代码 <div class="input-group i ...
- shell脚本实现目录的“5S”作业
shell,又称为命令解释器.首先它是一个软件,有很多个版本,现在最流行的为bash,它作为用户和内核沟通的中间桥梁,在系统中起着举足轻重的作用 shell脚本,是一个以.sh结尾的文件,里面是诸如l ...
- keepalived+nginx+tomcat+redis实现负载均衡和session共享(原创)
keepalived+nginx+tomcat+redis实现负载均衡和session共享 直接上链接,码了一天,就不再重写了,希望能帮到大家,有问题欢迎留言交流.
- jQuery实现 自动滚屏操作
实现自动滚屏思路: 1.滚屏即:文本的往上移动一段距离: 2.那么我们使文本每过一段时间就往上移动一段固定距离,就可实现滚屏: 3.直到文本底部出现在浏览器窗口中,专业点就是 文本移动的距离 + 浏览 ...
- js函数和window对象
- 干货分享:QQ群排名霸屏优化规则靠前的新技术
谈起QQ群排名的优化规则,很多人又爱又恨,原因很简单,爱他的都是引流效果是非常好的,通过关键词搜索排名好的技术,能排到全国默认前三,叫人怎能不爱他,恨的原因也恨简单,无论你的群完善的再怎么好,好像都无 ...
- mysql的char,varchar,text,blob
mysql的char,varchar,text,blob是几个有联系但是有有很大区别的字段类型,这算是mysql的基础吧,可是基础没有学好,恶补一下. 先简单的总结一下: char:定长,最大255个 ...
- Hive(8)-常用查询函数
一. 空字段赋值 1. 函数说明 NVL:给值为NULL的数据赋值,它的格式是NVL( value,default_value).它的功能是如果value为NULL,则NVL函数返回default_v ...