积极答复者
堆栈指针存储问题

问题
-
internal class Employee {
public Int32 GetYearsEmployed() { ... }
public virtual String GenProgressReport() { ... }
public static Employee Lookup(String name) { ... }
}internal sealed class Manager : Employee {
public override String GenProgressReport() { ... }
}问题1:Manager对象和Mananger类型对象他们的不同之处是什么啊?Manager对象里面的实例字段存储的都是些什么东西啊?是Manager类型对象里面的方法和字段的备份吗?
问题2:这里的同步块索引是起到什么作用的啊?
问题3:书上说Manager类型对象和Employee类型对象本质上夜是对象,它们的类型对象都是System.type类型的“实例”它们的类型指针成员会初始化成对System.Type类型对象的引用,后面又说System.Type类型对象本事也是一个对象,内部也有一个“类型对象指针”它是指向它本身,因为System。Type类型对象本身是一个类型对象的实例!这句话又是什么意思那?一点都不明白!System。Type怎么可以指向它本身那?
问题4:定义一个类型时,可以在类型的内部定义静态数据字段,为这些静态数据字段提供支援的字节是在类型对象自身中分配的。那到底是怎么分配的那?
- 已编辑 小小小小冯 2011年4月19日 5:42
答案
-
你好 小小小小冯,
当你new一个对象的时候,会在堆栈上存储开辟于堆中实例的引用,这里实例包括实例字段,类型对象指针(typehandle),同步索引块。
Typehandle的作用就是指向另一个堆(这个堆是用来存储IL代码的)中该类的数据元,这里面包括了方法的集合或者说是描述,当这个对象要都用到某个方法时就会用JIT工具进行及时编译,把编译后的二进制代码直接放到另一个内存中,修改typehandle指向该方法的指针,再次调用这个方法时,直接调用编译后的代码。
同步索引块作用:对象实例中的SynBlockIndex指针指向同步索引块的内存块,用于在多线程环境下对实体对象的同步操作。每个对象都有一个syncblockindex,这个值指示对象的线程同步状态。lock一个对象,相当于将对象的syncblockindex置1,表示该对象已经锁定。退出lock块代码时再将syncblockindex置0.关于lock(o)和lock(this),分别表示将o对象和当前对象锁定。
希望这个能够对你有所帮助
Best Regards
Daniel Wang [MSFT]
MSDN Community Support | Feedback to us
Get or Request Code Sample from Microsoft
Please remember to mark the replies as answers if they help and unmark them if they provide no help.
- 已建议为答案 Jarrey 2011年4月19日 3:02
- 已标记为答案 Leo Liu - MSFTModerator 2011年4月25日 3:10
全部回复
-
你好 小小小小冯,
当你new一个对象的时候,会在堆栈上存储开辟于堆中实例的引用,这里实例包括实例字段,类型对象指针(typehandle),同步索引块。
Typehandle的作用就是指向另一个堆(这个堆是用来存储IL代码的)中该类的数据元,这里面包括了方法的集合或者说是描述,当这个对象要都用到某个方法时就会用JIT工具进行及时编译,把编译后的二进制代码直接放到另一个内存中,修改typehandle指向该方法的指针,再次调用这个方法时,直接调用编译后的代码。
同步索引块作用:对象实例中的SynBlockIndex指针指向同步索引块的内存块,用于在多线程环境下对实体对象的同步操作。每个对象都有一个syncblockindex,这个值指示对象的线程同步状态。lock一个对象,相当于将对象的syncblockindex置1,表示该对象已经锁定。退出lock块代码时再将syncblockindex置0.关于lock(o)和lock(this),分别表示将o对象和当前对象锁定。
希望这个能够对你有所帮助
Best Regards
Daniel Wang [MSFT]
MSDN Community Support | Feedback to us
Get or Request Code Sample from Microsoft
Please remember to mark the replies as answers if they help and unmark them if they provide no help.
- 已建议为答案 Jarrey 2011年4月19日 3:02
- 已标记为答案 Leo Liu - MSFTModerator 2011年4月25日 3:10
-
Typehandle的作用就是指向另一个堆(这个堆是用来存储IL代码的)中该类的数据元,这里面包括了方法的集合或者说是描述,当这个对象要都用到某个方法时就会用JIT工具进行及时编译,把编译后的二进制代码直接放到另一个内存中,修改typehandle指向该方法的指针,再次调用这个方法时,直接调用编译后的代码。
同步索引块作用:对象实例中的SynBlockIndex指针指向同步索引块的内存块,用于在多线程环境下对实体对象的同步操作。每个对象都有一个syncblockindex,这个值指示对象的线程同步状态。lock一个对象,相当于将对象的syncblockindex置1,表示该对象已经锁定。退出lock块代码时再将syncblockindex置0.关于lock(o)和lock(this),分别表示将o对象和当前对象锁定。
-
Hi 小小小小冯,
每个对象实例都指向System.Type实例,System.Type实例是用来确定其它对象实例的类型,由于System.Type实例不需要被用户直接使用,所以他的对象指针指向了自身.
Leo Liu [MSFT]
MSDN Community Support | Feedback to us
Get or Request Code Sample from Microsoft
Please remember to mark the replies as answers if they help and unmark them if they provide no help.
-
Hi 小小小小冯,
每个对象实例都指向System.Type实例,System.Type实例是用来确定其它对象实例的类型,由于System.Type实例不需要被用户直接使用,所以他的对象指针指向了自身.
Leo Liu [MSFT]
MSDN Community Support | Feedback to us
Get or Request Code Sample from Microsoft
Please remember to mark the replies as answers if they help and unmark them if they provide no help.
您好:
实在是不好意思,您能不能用中文把上面的图片表达出来啊,呵呵,还有啊,你这个图片是在那本书上看到的还是你自己做的啊?搞了两天了,这个图片竟然没搞明白,真是惭愧,英文不行,感觉挺绕的!