[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)初始化内存,设置资源的 ...
随机推荐
- STM32之系统时钟
转载:http://www.openedv.com/posts/list/302.htm 时钟系统是处理器的核心,所以在学习STM32所有外设之前,认真学习时钟系统是必要的,有助于深入理解STM32. ...
- Python 学习笔记(十二)Python文件和迭代(一)
文件 文件和文件夹 文件:文本文件.二进制文件 文件夹:(windows) G:\pythonWorkspace\python\study (linux/mac) /home/workspace/py ...
- OGG故障集锦(一)
说明:此系列仅作OGG故障记录,未包含处理过程.仅作故障备案 ① ERROR OGG-00519 Source Context : SourceModule : [ggapp.ddl] Sourc ...
- 获取屏幕翻转:var resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize'
var resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',这段是为了获取移动端屏幕是否翻转(手机重力 ...
- 执行SQL查询导致磁盘耗尽故障演示
a fellow in IMG wechat group 2 met an error about running out of disk space when using MySQL ...
- JS 创建对象总结
狭义:new 构造函数. (注:在JS中创建对象只有一种方式,就是new 构造函数.其中字面量的方式是一种语法糖,本质仍然是new 构造函数) 广义:工厂模式(解决复杂度) 构造函数模式(解决复杂度, ...
- php bug 调试助手 debug_print_backtrace()
debug_print_backtrace() 是一个很低调的函数,很少有人注意过它. 不过当我对着一个对象调用另一个对象再调用其它的对象和文件中的一个函数出错时,它也许正在一边笑呢 如果我们想知道某 ...
- nginx 同一域名下分目录配置显示php,html,资源文件
安装上nginx后 注意后nginx.conf 中的这么几行 error_log /var/log/nginx/error.log; 日志,这个很有用 include /etc/nginx/conf ...
- drawImage画本地资源,在真机无法显示
把图片的路径改成本地的绝对路径
- 虚拟机的三种联网模式(桥接模式、NAT 模式、仅主机模式)
虚拟机的网络连接方式分为三种,分别是桥接模式.NAT 模式.和仅主机模式,三种连接模式存在着一定的差异,那么我们该如何选择适合自己的连接模式呢? 1.桥接模式:在此模式下,虚拟机相当于一台独立的电脑, ...