翔如菲菲

其实天很蓝,阴云总会散;其实海不宽,此岸连彼岸.

导航

2011年2月23日 #

IL语言之.ctor

摘要: 简述:构造函数,在类被实例化时,它会被自动调用。 当C#的类被编译后,在IL代码中会出现一个名为.ctor的方法,它就是我们的构造函数,对应C#中的构造函数。且看下面的代码: public class Class1 { private string name; private int age; } 类Class1中没有显示的构造函数,只有两字段,现在用ILDasm.exe打开编译后生成的exe文件,会看到: 可以看到这里有个.ctor,我们没有定义构造函数,但这里却出现了.ctor,这就说明了: 当没有显示定义构造函数时,会自动生成一个构造函数,它没有参数,没有返回值。 那我们来看看这个.ct 阅读全文

posted @ 2011-02-23 14:23 翔如飞飞 阅读(665) 评论(0) 推荐(0)

字符串的驻留(String Interning)

摘要: 关于字符串的驻留的机制,对于那些了解它的人肯定会认为很简单,但是我相信会有很大一部分人对它存在迷惑。在开始关于字符串的驻留之前,先给出一个有趣的Sample: Code Snip: staticvoidMain(string[]args) { stringstr1="ABCD1234"; stringstr2="ABCD1234"; stringstr3="ABCD"; stringstr4="1234"; stringstr5="ABCD"+"1234"; stringst 阅读全文

posted @ 2011-02-23 14:09 翔如飞飞 阅读(178) 评论(0) 推荐(0)

类型实例的创建位置、托管对象在托管堆上的结构

摘要: 1. 值类型实例的创建位置: 对于值类型的实例,CLR在运行时有两种分配方式:(1) 如果该值类型的实例作为类型中的方法(Method)中的局部变量,则该实例被创建在线程栈上;(2) 如果该值类型的实例作为类型的成员,则该实例作为引用类型(引用类型在GC堆或者LOH上创建)的实例的一部分,被创建在GC堆上。下面这段代码演示了这两种情况: publicclassTest1{privateinti;//上面(2)中的情况,生成Test的实例的同时,int类型的实例i被创建在GC堆上publicTest1(){byteb=0;//(1)中的情况,byte类型的实例b被创建在执行这段代码的线程栈上}} 阅读全文

posted @ 2011-02-23 14:05 翔如飞飞 阅读(211) 评论(0) 推荐(0)

Metadata 的格式和意义

摘要: 如果你閱讀 .NET 的書,你可能會常常看到 Metadata 一詞。根據書上的說法,Metadata 可以為 .NET 帶來莫大的威力。事實上,Java 的 class 檔案內也具有 Metadata。只是 Java 與 .NET 的 metadata 結構不同,且 Java 的 metadata 不若 .NET 的完整。不過,如果你是 Java 的愛好者,你可以放心,因為預計在未來版本中,Java 也會向 .NET 看齊,提供更豐富的 Metadata。 本文章的主旨在簡單地介紹 Metadata。我會先介紹 .NET 的 Metadata 格式和意義,本文章的下篇會接著介紹 .Java 阅读全文

posted @ 2011-02-23 13:11 翔如飞飞 阅读(361) 评论(0) 推荐(0)

.NET CLR Hosting 简介

摘要: 某些軟體(例如 Microsoft SQL Server 2005、Borland JBuilder)需要支援 .NET 或 Java,這樣的軟體可以讓 .NET CLR 或 Java VM 寄宿在自己身上,成為自己的一部份,被 CLR/JVM 所寄宿的軟體就稱為 CLR Host(宿主)或 JVM Host。本文章簡單地介紹 .NET CLR Hosting 的觀念。 本文章內容分成三部分,首先介紹 Shim 和 CLR 的關係,接著說明 CLR Host,最後介紹 .NET Framework CLR 2.0 版的 11 個 Hosting Manager。 Shim and VMs 當你 阅读全文

posted @ 2011-02-23 13:09 翔如飞飞 阅读(345) 评论(0) 推荐(0)

.NET中间语言(IL)

摘要: NET CLR 和 Java VM 都是堆疊式虛擬機器(Stack-Based VM),也就是說,它們的指令集(Instruction Set)都是採用堆疊運算的方式:執行時的資料都是先放在堆疊中,再進行運算。Java VM 有約 200 個指令(Instruction),每個指令都是 1 byte 的 opcode(操作碼),後面接不等數目的參數;.NET CLR 有超過 220 個指令,但是有些指令使用相同的 opcode,所以 opcode 的數目比指令數略少。特別注意,.NET 的 opcode 長度並不固定,大部分的 opcode 長度是 1 byte,少部分是 2 byte。 本文 阅读全文

posted @ 2011-02-23 13:02 翔如飞飞 阅读(422) 评论(0) 推荐(0)