|
2009年6月6日
摘要:
现在, 你应该知道CLR的所有内容都是围绕类型展开的, 类型给你的应用程序和其他类型提供了所需要的功能. 类型也作为一种机制使得一种语言编写的代码可以和另一种语言编写的代码进行无缝地集成. 因为类型是CLR的根基, 微软创建了正式的文档说明——通用类型系统(CTS)——来表述类型是如何定义的, 以及它们的行为是什么样的. >>注意: 实际上, 微软已经将CTS和.NET Framewo... 阅读全文
摘要:
.NET Framework包括了FCL, FCL是一组DLL程序集, 包含着几千个类型定义, 每个类型都暴露出一些功能. 微软正在生成额外的程序库, 例如WinFx和DirectX SDK. 这些额外的程序库提供了更多的类型, 暴露出更多的功能供你使用. 我希望微软将来能提供更多的程序库, 这里是开发者使用这些程序集能够创建的几类应用程序: Web服务: 能处理基于XML的信息通过Inte... 阅读全文
摘要:
随.NET Framework发布的NGen.exe工具可以将IL代码编译成native代码, 当应用程序安装在用户的机器上时. 因为代码是在安装的时候编译的, CLR的JIT编译器不需要在运行时刻编译IL代码, 这能提高应用程序的性能. NGen.exe工具在下面两个场合很有趣: 提高了应用程序的启动速度: 运行NGen.exe能提高启动速度, 因为代码已经编译成native代码, 所以在运... 阅读全文
摘要:
默认情况下, 微软C#编译器产生的代码都是安全的, 安全的代码可以通过验证的代码. 然而, 微软C#编译器允许开发者编写不安全的代码, 不安全的代码允许直接访问内存地址, 能直接操作这些地址对应的字节. 这是非常强大的功能, 当与非托管的代码互操作或者你想提高实时算法的性能时, 这是非常有用的功能. 然而, 使用不安全的代码将会导致重大的风险: 不安全的代码会破坏数据结构, 产生或者打开安全漏洞... 阅读全文
摘要:
IL是基于栈的, 这意味着所有的指令都将操作数放到执行栈上, 然后从栈弹出结果. 因为IL没有提供操作寄存器的指令, 编译器开发者很容易产生IL代码, 他们不需要考虑管理寄存器, 只需要很少的IL指令(因为不存在寄存器操作). IL指令也是无类型的, 例如, IL提供一个add指令, 它对栈上的最后两个操作数进行加法操作, 没有单独的32位和64位版本的add指令, 当执行add指令时, 它要确... 阅读全文
摘要:
前面提到, 托管的程序集包含着metadata和中间语言(IL), IL是一个独立于CPU的机器语言, 是微软与几家外部商业和学术的语言/编译器作者协商之后开发的. IL是比绝大多数CPU机器语言高级的语言, IL能够访问和操作对象类型, 能够创建和初始化对象, 调用对象的虚函数, 能直接操作数组元素, 它甚至还能为错误处理抛出和捕获异常. 你可以把IL想象为一个面向对象的机器语言. 通常, 开... 阅读全文
摘要:
我们可以在%windir%system32下查找MSCorEE.dll文件来判断一个机器中是否安装了.NET框架。 当生成一个.exe程序集时,编译器/链接器会产生一些特殊的信息,并将它们嵌入到结果程序集的PE文件表头及其各个组成文件的.text部分。当EXE文件被调用时,这些特殊的信息将导致CLR被加载并初始化。CLR随后会定位到应用程序的入口点方法,从而以此来启动应用程序。 .NET程序的... 阅读全文
摘要:
CLR不是直接与托管模块打交道, 而是和程序集(assembly)打交道. 一个程序集是一个抽象的概念, 开始的时候很难掌握. 首先, 一个程序集是一个或多个托管模块或者资源文件的逻辑上的组合. 第二, 一个程序集是重用, 安全性, 版本控制的最小单元. 依赖于你选择的编译器或工具, 你能产生单文件或者多文件的程序集. 在CLR的世界中, 一个程序集就称为一个组件(component). 下... 阅读全文
摘要:
非托管 C/C++可以在底层控制系统,能精确地按照自己的需要来管理内存, 很容易创建线程等等.VB6允许你快速地构建UI应用程序,很容易控制COM对象和数据库. CLR正像其名字那样, runtime被很多不同的编程语言使用, CLR的feature对任何以CLR为目标的编程语言都是使用的.例如, runtime使用异常来报告错误, 因此所有的语言都是通过异常来报告错误的. 另外一个例子是run... 阅读全文
摘要:
元数据被存储在PE文件的一个区域,MSIL则被存储在PE文件的另一个区域。元数据部分包含一系列的表和堆。MSIL部分则包含IL语言和元数据标记,这些元数据标记指向元数据部分的某个表的某行或者指向某个堆。元数据表和堆 元数据表中包含程序的各种信息,比如,某个表描述程序中的各个类,另外一个表描述各个类中的字段等等。如果你的代码里有10个类,那么类表中就会有10行,每一行对应一个类。同时类表还会引用其它... 阅读全文
|