none
堆栈指针存储问题 RRS feed

  • 问题

  •     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月14日 12:40

答案

  • 你好 小小小小冯,

     

    当你new一个对象的时候,会在堆栈上存储开辟于堆中实例的引用,这里实例包括实例字段,类型对象指针(typehandle),同步索引块。

    Typehandle的作用就是指向另一个堆(这个堆是用来存储IL代码的)中该类的数据元,这里面包括了方法的集合或者说是描述,当这个对象要都用到某个方法时就会用JIT工具进行及时编译,把编译后的二进制代码直接放到另一个内存中,修改typehandle指向该方法的指针,再次调用这个方法时,直接调用编译后的代码。

    同步索引块作用:对象实例中的SynBlockIndex指针指向同步索引块的内存块,用于在多线程环境下对实体对象的同步操作。每个对象都有一个syncblockindex,这个值指示对象的线程同步状态。lock一个对象,相当于将对象的syncblockindex1,表示该对象已经锁定。退出lock块代码时再将syncblockindex0.关于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.

    2011年4月16日 3:31
    版主

全部回复

  • 从上述代码来看Manager继承Emplyee


    胡超
    2011年4月14日 13:46
  • 堆栈指针是逻辑概念。
    胡超
    2011年4月14日 13:54
  • 你好 小小小小冯,

     

    当你new一个对象的时候,会在堆栈上存储开辟于堆中实例的引用,这里实例包括实例字段,类型对象指针(typehandle),同步索引块。

    Typehandle的作用就是指向另一个堆(这个堆是用来存储IL代码的)中该类的数据元,这里面包括了方法的集合或者说是描述,当这个对象要都用到某个方法时就会用JIT工具进行及时编译,把编译后的二进制代码直接放到另一个内存中,修改typehandle指向该方法的指针,再次调用这个方法时,直接调用编译后的代码。

    同步索引块作用:对象实例中的SynBlockIndex指针指向同步索引块的内存块,用于在多线程环境下对实体对象的同步操作。每个对象都有一个syncblockindex,这个值指示对象的线程同步状态。lock一个对象,相当于将对象的syncblockindex1,表示该对象已经锁定。退出lock块代码时再将syncblockindex0.关于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.

    2011年4月16日 3:31
    版主
  •  

    Typehandle的作用就是指向另一个堆(这个堆是用来存储IL代码的)中该类的数据元,这里面包括了方法的集合或者说是描述,当这个对象要都用到某个方法时就会用JIT工具进行及时编译,把编译后的二进制代码直接放到另一个内存中,修改typehandle指向该方法的指针,再次调用这个方法时,直接调用编译后的代码。

    同步索引块作用:对象实例中的SynBlockIndex指针指向同步索引块的内存块,用于在多线程环境下对实体对象的同步操作。每个对象都有一个syncblockindex,这个值指示对象的线程同步状态。lock一个对象,相当于将对象的syncblockindex1,表示该对象已经锁定。退出lock块代码时再将syncblockindex0.关于lock(o)lock(this),分别表示将o对象和当前对象锁定。

          您好,非常感谢您的回答,不过我对上面的这两段回答还是模模糊糊的,您能不能用一张图来表示一下啊?要是可以的话就太感谢您了。还有问题3也不太理解,真心的希望您能解释一下,这个问题困惑我好久了,这些东西搞不明白,感觉痛不欲生,希望您能解除我的困惑,再次的谢谢您了!
    2011年4月16日 13:37
  • 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.

    2011年4月20日 3:18
    版主
  • 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.

             您好:

                     实在是不好意思,您能不能用中文把上面的图片表达出来啊,呵呵,还有啊,你这个图片是在那本书上看到的还是你自己做的啊?搞了两天了,这个图片竟然没搞明白,真是惭愧,英文不行,感觉挺绕的!


    2011年4月22日 0:10