比如 int a=3;
那么这个3存放在System.Int32结构的什么地方呢?
更明确地说,根据msdn的说明,System.Int32的内容是17个方法,两个字段(publicconstint MaxValue 和publicconstint MinValue),以及对一些接口的实现。没有一个字段是储存数值的。那么我的问题就是这个int a=3中的3存放在哪里?
附msdn:http://msdn.microsoft.com/zh-CN/library/system.int32.aspx

解决方案 »

  1.   

    可以存放在cpu寄存器、堆栈或者托管堆上。
    如果在函数中定义的,一般在堆栈上,但是也可能被优化到寄存器中。
    如果是成员变量,一般在托管堆上。
    如果用了unsafe,做p-invoke,它也可以跑到非托管的堆上。
      

  2.   

    你看到的这些“字段”、“函数”,其实是对int装箱后“箱子上的”。
      

  3.   

    我的意思是
    struct A
    {
    int no;
    }
    A a=new A();
    a.no=3;
    那么这个3存放在a这个结构的一个int 类型名为no的字段中。
    但是
    struct Int32
    {
    publicconstint MaxValue;
    publicconstint MinValue;
    其他的方法;
    }
    他只有两个字段,还是const的。
    那么Int32 b=3;
    那么这个3按理说应该是存储在Int32这个结构的某个成员字段中了?但Int32没有其他的字段了。
      

  4.   


    你的意思是否可以理解为c#对Int32做了特殊处理?是struct Int32这个结构的机制不同于其他的struct?
      

  5.   

    这种特殊处理叫装箱/拆箱。事实上,int在C#和C++中没有什么不同(不装箱的话),否则C#的性能要低死了。
      

  6.   

    这是对的
    但是俺表示Int32只是一个类型而已,而且是个值类型,publicconstint MaxValue;publicconstint MinValue;表示的是Int32类型最大值和最小值吧。
    装箱和拆箱和这个没有什么关系吧。
      

  7.   

    MaxValue跟MinValue就是ToInt32的最大跟最小值。根据代码表面意思就可以看到的。你也可以ToInt64