这本书这几年零零散散读过两三遍了,作为经典书籍,应该重复读反复读,既然我现在开始写博了,我也准备把以前觉得经典的好书重读细读一遍,并且将笔记整理到博客中,好记性不如烂笔头,同时也在写的过程中也可以加深自己理解的深度,当然同时也和技术社区的朋友们共享。
针对x86、x64和IA64三种平台有三个版本的CLR,信息包含在PE头中
/开关 | 托管模块 | x86 windows | x64 windows | IA64 windows |
anycpu | PE32/不指定 | 32位 | 64位 | 64位 |
x86 | PE32/x86 | 32位 | Wow64运行 | Wow64运行 |
x64 | PE32+/x64 | 不运行 | 64位 | 不运行 |
Itanium | PE32+/Itanium | 不运行 | 不运行 | 64位 |
有两个C#编译器开关会影响代码的优化:/optimize和/debug,请看下表:
编译器开关设置 | C# IL代码质量 | JIT本地代码质量 |
/optimize- /debug(默认) | 未优化 | 有优化 |
/optimize- /debug(+/full/pdbonly | 未优化 | 未优化 |
/optimize+/debug(-/+/full/pdbonly | 有优化 | 有优化 |
优缺点比较:
- 未优化(/optimize-),未优化IL代码,包含许多NOP(no-operation)指令,还包含分支指令,优点是即使调试
- 优化的IL代码,编译器删除多余的NOP和分支指令,代码更小,但却难以单步调试
编译器默认调试配置
优点:
缺点:
私有部署 | 全局部署 | |
弱命名程序集 | 支持 | 不支持 |
强命名程序集 | 支持 | 支持 |
私有程序集部署特征:引用程序集存放在基目录或者基目录的子目录
探测范围:基路径 - 配置路径 - 相同名称子路径 - 语言文化子目录
私有程序集目录配置:
<configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <probing privatePath="AuxFiles1,AuxFiles2" /> </assemblyBinding> </runtime> </configuration>
SDK工具
IL是中间语言,支持混合编程,C#只是利用CLR的一个子集,IL则是完全面向CLR的
CLR启动入口(MSCorEE.dll)(3种CPU架构3个版本,负责加载程序集)
WoW64能模拟x86指令集
CLS语言规范,规范混合语言之间的互操作 [assembly: CLSCompliant(true)]
语言互操作
响应文件,rsp文件,包含一些编译开关参数,系统全局响应文件自动引用默认程序集
程序集搜索目录及顺序
多文件程序集,编译器将module合并,addmodule开关,也可以使用AL.exe,用处:
程序集文化
原文:http://www.cnblogs.com/fecktty2013/p/readingnotes-clr-12.html